美文网首页Android进阶之路Android开发数据结构和算法分析
LeetCode二叉树专题 (8) 二叉树的最小深度

LeetCode二叉树专题 (8) 二叉树的最小深度

作者: ZSACH | 来源:发表于2020-07-15 09:15 被阅读0次
    image

    题目

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

    image

    解题思路

    之前有一道二叉树的最大深度的题目比较类似,那道题是使用递归取左右子树的深度取最大值。

    递归解法

    那这道题就是相反:取左右子树深度的最小值,通过递归的过程。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public int minDepth(TreeNode root) {
            if(root == null){
                return 0;
            }
            int left = minDepth(root.left) + 1;
            int right = minDepth(root.right) + 1;
            return Math.min(left,right);
    }
    

    什么?
    这样不对,[2,1]不能通过。应该输出2,但是上面的代码输出了1。
    再阅读题目,原来它的要求是到叶子节点的深度,如果只有跟节点是不算作深度的,我们需要怎么改的,大家可以想一想

    思考时间

    我们可以判断如果没有左右子树,就以其他的子树的深度为准。

    public int minDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        //以右子树的高度为准
        if (root.left == null && root.right != null) {
            return 1 + minDepth(root.right);
        }
        //以左子树的高度为准
        if (root.right == null && root.left != null) {
            return 1 + minDepth(root.left);
        }
    
        return 1 + Math.min(minDepth(root.left), minDepth(root.right));
    }
    

    迭代解法

    这道题也可以使用迭代求解,利用层序遍历记录层数,到达叶子节点的时候,判断得到一个最小的节点即可,自己写下代码把。

    相关文章

      网友评论

        本文标题:LeetCode二叉树专题 (8) 二叉树的最小深度

        本文链接:https://www.haomeiwen.com/subject/bozrhktx.html