查找二进制搜索树的最小深度时的附加返回语句

时间:2016-02-04 19:24:55

标签: recursion binary-search-tree

以下是我在网上找到的用于查找二叉搜索树最小深度的代码:

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.为什么需要这样做?

2 个答案:

答案 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语句。