二叉树最小深度

哎,好难受!!!

看不懂,学不会,不会做

二叉树最小深度_第1张图片

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

    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,之后的值就一直维持了这个

于是我又继续想啊~想~

 二叉树最小深度_第2张图片

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

当左右节点有一个其中不为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);
    }

二叉树最小深度_第3张图片

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

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

public int minDepth(TreeNode root) {
        Queue 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

你可能感兴趣的:(基础算法,深度优先,算法)