力扣简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为他兜底。

浙公网安备 33010602011771号