☆☆☆方法1:递归,需要注意二叉树退化成链表的情况,要单独处理没有左子树或没有右子树的特殊情况
方法2:BFS。二叉树层序遍历
☆☆☆方法3:DFS
class Solution { int min = Integer.MAX_VALUE; public int minDepth(TreeNode root) { /** * 方法1:递归 * 需要注意二叉树退化成链表的特殊情况。 */ if (root == null) return 0; int left = minDepth(root.left); int right = minDepth(root.right); // 如果left和right都为0,说明是叶子节点,返回1即可, // 如果left和right有一个为0,说明其中一个子节点为空,此时返回它另一个子节点的最小深度+1即可。 // 如果left和right都不为0,说明左右孩子都不为空,返回最小深度的+1即可。 return (left == 0 || right == 0) ? 1 + left + right : Math.min(left,right) + 1; /** * 方法2:二叉树层序遍历 */ /* if (root == null) return 0; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); int level = 0; while (!queue.isEmpty()) { int size = queue.size(); level ++; for (int i = 0; i < size; i++) { TreeNode cur = queue.poll(); if (cur.left == null && cur.right == null) return level; if (cur.left != null) queue.offer(cur.left); if (cur.right != null) queue.offer(cur.right); } } return -1; */ /** * 方法3:DFS */ /* if (root == null) return 0; dfs(root, 1); // 初始化为第一层 return min; */ } private void dfs(TreeNode root, int level) { if (root == null) return; // 每次到叶子节点时 更新min if (root.left == null && root.right == null) { min = Math.min(min, level); } dfs(root.left, level + 1); dfs(root.right, level + 1); } }