Leetcode JAVA刷刷站(111)二叉树的最小深度

一、题目概述 

二、思路方向  

       在Java中,要找出二叉树的最小深度,我们可以使用递归的方法。基本思路是,对于给定的根节点,如果它是空的,那么最小深度为0(但实际上,空树没有深度,但在这个问题的语境下,我们可以认为空树的最小深度为0,或者更准确地,我们应该处理空树的情况以避免返回0)。如果根节点不是空的,我们需要检查它的左右子树:

  1. 如果根节点没有左子树(或右子树),那么最小深度就是右子树(或左子树)的最小深度加1。
  2. 如果根节点既有左子树又有右子树,那么最小深度就是左子树和右子树中较小的那个的最小深度加1。

三、代码实现  

class TreeNode {  
    int val;  
    TreeNode left;  
    TreeNode right;  
    TreeNode(int x) { val = x; }  
}  
  
public class Solution {  
    public int minDepth(TreeNode root) {  
        // 如果树为空,则深度为0(但在实际逻辑中,我们不会直接返回0)  
        if (root == null) {  
            return 0;  
        }  
          
        // 如果树只有一个节点,即根节点,则深度为1  
        if (root.left == null && root.right == null) {  
            return 1;  
        }  
          
        // 如果左子树为空,则递归计算右子树的最小深度  
        if (root.left == null) {  
            return 1 + minDepth(root.right);  
        }  
          
        // 如果右子树为空,则递归计算左子树的最小深度  
        if (root.right == null) {  
            return 1 + minDepth(root.left);  
        }  
          
        // 否则,取左右子树中较小的最小深度,并加1  
        return 1 + Math.min(minDepth(root.left), minDepth(root.right));  
    }  
  
    public static void main(String[] args) {  
        // 示例用法  
        TreeNode root = new TreeNode(3);  
        root.left = new TreeNode(9);  
        root.right = new TreeNode(20);  
        root.right.left = new TreeNode(15);  
        root.right.right = new TreeNode(7);  
  
        Solution solution = new Solution();  
        int minDepth = solution.minDepth(root);  
        System.out.println("Min Depth: " + minDepth); // 应该输出 2  
    }  
}

执行结果: 

四、小结

       注意,在这个实现中,我添加了对空树和只有一个节点的树的特殊情况的处理。虽然对于空树的情况,通常我们会说它没有深度,但在这个问题中,我们假设空树的最小深度为0(尽管实际上在返回结果之前,我们不会遇到空树的情况,因为我们是在调用minDepth(root)时传入了一个非空的根节点)。对于只有一个节点的树,最小深度显然是1。

此外,请注意,在检查左右子树是否为空时,我们实际上不需要同时检查两个条件,因为一旦确定了一个子树为空,我们就可以直接返回另一个子树的最小深度加1。但是,为了清晰起见,我在示例代码中保留了这两个检查。在实际应用中,你可以通过稍微修改代码来优化这一点。

 结语 

不受苦中苦

难为人上人

!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT 青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值