LeetCode111. 二叉树的最小深度

题目描述

给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。

涉及tag

二叉树

算法思路

递归算法:
1 确定返回值和传入参数:返回深度,传入节点root
public int minDepth(TreeNode root)
2 找出递归结束条件:
当root没有左子树和右子树的时候,返回1
if (root.left == null && right == null) return 1;
当root有一个子树为空的时候,返回不为空的子树的深度。
if root.left == null || root.right == null)return minDepth(root.left) + minDepth(root.right);
当root没有空子树,持续递归
层序遍历:
思路1:如果下一层不是满的二叉树,说明有这一层有最小深度的叶子结点。让队列长度与2的depth进行比较。
思路2 :返回找到的第一个叶子节点的深度。
比较dfs和bfs:dfs实际上是在遍历所有的子树之后给出能找到的最短路径,空间复杂度大,而bfs是depth增加一步,所有的节点前进一步,不用遍历完所有子树。

示例代码

class Solution {
    public int minDepth(TreeNode root) {
        if (root == null) return 0;
        int depth = 0;
        int minLeft = minDepth(root.left);
        int minRight = minDepth(root.right);
        if (root.left == null && root.right == null) return 1;
        if (root.left == null || root.right == null) 
        return minLeft + minRight + 1;
        if (root.left != null && root.right != null)
        depth = Math.min(minLeft, minRight);
        return depth + 1;
    }
}

简化为:

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null) return 0;
        int m1 = minDepth(root.left);
        int m2 = minDepth(root.right);
        //1.如果左孩子和右孩子有为空的情况,直接返回m1+m2+1
        //2.如果都不为空,返回较小深度+1
        return root.left == null || root.right == null ? m1 + m2 + 1 : Math.min(m1,m2) + 1;
    }
}

示例代码2

class Solution {
    public int minDepth(TreeNode root) {
        if (root == null) return 0;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        int depth = 0;
        while(!queue.isEmpty()) {
            int size = queue.size();
            depth++;
            while (size-- > 0) {
                root = queue.poll();
                if (root.right ==null && root.left == null) return depth;
                if (root.left != null) queue.add(root.left);
                if (root.right != null) queue.add(root.right);
            }     
        }
        return depth;
    }
}

你可能感兴趣的:(LeetCode题目,java,leetcode)