力扣简111 二叉树的最小深度

为了看深度优先搜索和广度优先搜索 看了下这个题

深度优先搜索是列出最终情况后 对剩余的调用递归 不断转化成更小模型的问题 我的理解是先左然后右 分先后

广度优先搜索是入队列 先进先出往里压或者出 同时把左右子树都添加进去 左右基本是同时执行的 不是先左子树的左子树

 

深度优先搜索 递归  广度优先搜索 队列

 

最开始忽略了左子树为空还得计算右子树的叶子节点深度,直接分为左空右空和其他,对于其他认为直接返回0,导致会直接归入其他而报错!

改正后效果也挺一般:

 

 

package leetcode01;

//给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
public class Solution111 {
    public static int minDepth(TreeNode root) {
        if(root==null) {
            return 0;
        }
        else {
            if(root.left==null && root.right!=null) {
                return(minDepth(root.right)+1);
            }
            else if(root.left!=null && root.right==null) {
                return(minDepth(root.left)+1);
            }
            else {
                return(Math.min(minDepth(root.left), minDepth(root.right))+1);
            }        
        }
    }
        
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TreeNode root=new TreeNode(3,new TreeNode(9),new TreeNode(20,new TreeNode(15),new TreeNode(7)));
        //TreeNode root=new TreeNode(2,null,new TreeNode(3,null,new TreeNode(4,null,new TreeNode(5,null,new TreeNode(6)))));
        System.out.print(minDepth(root));
    }

}

 

人家直接标记深度确实快!

最开始的depth+1错写成depth++,断点调试出错,看了下题解。

还有最后的return 0;感觉永远执行不到啊!不理解!问了一下翔哥!等回复!

 

public class Solution111 {        
    public static int minDepth(TreeNode root) {
        if(root==null) {
            return 0;
        }
        Queue<Queuenode> queue=new LinkedList<Queuenode>();
        queue.add(new Queuenode(root,1));
        while(!queue.isEmpty()) {
            Queuenode q = queue.poll();
            TreeNode node = q.node;
            int depth = q.depth;
            if(node.left==null&&node.right==null) {
                return depth;
            }
            if(node.right!=null) {
                queue.add(new Queuenode(node.right,depth+1));//最开始写的++,会导致左右子树各加一,导致结果错误。
            }
            if(node.left!=null) {
                queue.add(new Queuenode(node.left,depth+1));//这感觉永远都执行不到哇!为啥不加会报错,感觉原来的逻辑已经有返回值了啊。
            }
        }
        return 0;    
    }

//这感觉永远都执行不到哇!为啥不加会报错,感觉原来的逻辑已经有返回值了啊。 

//翔哥说:if里只能表示可能有返回值,编译器是傻瓜,不会理解后两种if最终都会以第一个结束,所以必须要有形式上的return为他兜底。

posted @ 2022-05-21 21:25  Ssshiny  阅读(30)  评论(1)    收藏  举报