LeetCode111. 二叉树的最小深度

☆☆☆方法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);
    }
}
原文地址:https://www.cnblogs.com/HuangYJ/p/14169877.html