LeetCode【111. 二叉树的最小深度】

本文探讨了二叉树最小深度算法的实现与修正,针对原有算法在处理特定情况时的不足进行了改进,确保了算法能正确计算到叶子节点而非仅限于根节点,提供了一种更精确的递归解决方案。

最小深度,看起来很简单,就是左右节点的深度最小值

定义一个函数,计算其深度

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null)
        {
            return 0;
        }
        else if(root.left == null && root.right ==null)
        {
            return 1;
        }
        else
        {
            int left = Depth(root.left);
            int right = Depth(root.right);
            if(left > right)
            {
            return left;
            }
            else
            {
                return right;
            }
        }
    }
    public int Depth(TreeNode root)
    {
        if(root == null)
        {
            return 0;
        }
        else
        {
            int left = Depth(root.left);
            int right = Depth(root.right);
            if(left<right)
            {
                return left+1;
            }
            else
            {
                return right+1;
            }
        }
    }
}

有错误在于,[1,2],只有一个节点,然后,该代码就会直接输出1,因为另一个没有节点,那么就直接是1

但实际上,应该是到叶子节点,不应该有叶子节点,而仍然只算根节点。

而且定义的函数其实和本函数类似,那么就可以直接迭代本函数,不需要另外定义。

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null)
        {
            return 0;
        }
        else if(root.left == null && root.right ==null)
        {
            return 1;
        }
        else
        {
            int left = minDepth(root.left);
            int right = minDepth(root.right);
            if(left == 0 && right > 0)
            {
                return right+1;
            }
            else if(right == 0 && left > 0)
            {
                return left+1;
            }
            else if(left > right)
            {
                return right+1;
            }
            else
            {
                return left+1;
            }
        }
    }
}

后面增加了上述情况,不会只算根节点。

转载于:https://www.cnblogs.com/wzwi/p/10768417.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值