二叉树最小深度

哎,好难受!!!

看不懂,学不会,不会做

本来我以为直接将求深度的代码改为求最小值就好了,于是我又开始了我的幼稚且菜狗的代码编写:

    public int minDepth(TreeNode root) {
        dfs(root);
        return min;
    }
    int min=Integer.MAX_VALUE;;
    int n=0;
    void dfs(TreeNode root){
        if(root==null){
            if(min>n){
                min=n;
            }
         return;
        }
        n++;
        dfs(root.left);
        dfs(root.right);
        n--;
        
    }

于是又又又错了,一直为1,于是我又开始寻找原因:

我发现当走到第一层的时候,值就已经为1,之后的值就一直维持了这个

于是我又继续想啊~想~

 

然后我又屈服于我的智商,看了题解:

当左右节点有一个其中不为null的时候,那么就说明,最小深度在不为bull的那一边。

所以返回1+本层的深度

 public int minDepth(TreeNode root) {
      
        return   dfs(root);
    }
    int min=Integer.MAX_VALUE;;
    int n=0;
    int dfs(TreeNode root){
        if(root==null){
         return 0;
        }
         int l=dfs(root.left);
         int r=dfs(root.right);
        if(root.left!=null&&root.right==null){
            return 1+l;
        }
       if(root.left==null&&root.right!=null){
            return 1+r;
       }
       return 1+Math.min(l,r);
    }

这玩意还是得自己慢慢体会。。。

还是我的层序遍历好用,嘿嘿~

public int minDepth(TreeNode root) {
        Queue<TreeNode> dui=new LinkedList<>();
        int size=0;
        TreeNode p=null;
        if(root!=null){
            dui.offer(root);
        }else{
            return 0;
        }
        int ans=0;
        while(!dui.isEmpty()){
            size=dui.size();
            ans++;
            for(int i=0;i<size;i++){
                p=dui.poll();
                //第一次左右节点为空时,就是最小深度
                if(p.left==null&&p.right==null){
                    return ans;
                }
                if(p.left!=null){
                    dui.offer(p.left);
                }
                if(p.right!=null){
                    dui.offer(p.right);
                }
            }
        }
        return ans;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值