以下是我在网上找到的用于查找二叉搜索树最小深度的代码:
public class Solution {
public int minDepth(TreeNode root) {
if(root == null){
return 0;
}
LinkedList<TreeNode> nodes = new LinkedList<TreeNode>();
LinkedList<Integer> counts = new LinkedList<Integer>();
nodes.add(root);
counts.add(1);
while(!nodes.isEmpty()){
TreeNode curr = nodes.remove();
int count = counts.remove();
if(curr.left != null){
nodes.add(curr.left);
counts.add(count+1);
}
if(curr.right != null){
nodes.add(curr.right);
counts.add(count+1);
}
if(curr.left == null && curr.right == null){
return count;
}
}
return 0;
}
}
我不明白的是结尾处的额外返回语句 - 返回0.为什么需要这样做?
答案 0 :(得分:0)
对于root不为空的情况,它是树中唯一的节点(根位于深度为0)。需要返回语句,因为如果树是空的,则必须返回一些内容。它返回0,因为深度为0.
答案 1 :(得分:0)
与ghostofrasputin类似,return语句就在那里,因为如果不满足while条件,那么仍然有一个值要返回。
现在更重要的问题是,如果程序永远不会达到返回声明,为什么我们需要最后一次返回? (我相信这是这种情况)
即使您能够告诉返回语句不会被使用,编译器也不够复杂,无法确定,因此只需要退出while循环就需要一个return语句。
它类似于以下代码
public boolean getTrueOrFalse() {
if(Math.random() < 1) {
return true;
}
return false;
}
虽然我们知道这总是会返回true,因为Math.random()
总是小于1,但编译器无法解决这个问题,因此如果不满足if语句则需要return语句。