递归countLeave函数

时间:2016-10-25 15:23:02

标签: java

我正在尝试计算二叉树的叶子,但递归函数总是返回0.

有人可以帮帮我吗?

public static int countLeaves(BinaryTree tree) {
    if (tree.emptyTree()) {
        System.out.println("im here ");
        return 0;
    }

    if (tree.getLeft() == null && tree.getRight() == null) {
         System.out.println("but I'M NEVER HERE "); // doesn't get in
         return 1;
    } else {
        return countLeaves(tree.getLeft()) + countLeaves(tree.getRight());
    }
}

2 个答案:

答案 0 :(得分:2)

请参阅代码中的说明注释。

public static int countLeaves(/* @Nullable */ BinaryTree tree) {
    if (tree == null) {
        // Guardian clause
        return 0;
    } else if (tree.getLeft()==null && tree.getRight()==null) {
        // This is a leaf node ==> count this leaf.
        return 1;
    } else {
        // This is a non-leaf node ==> recursive call. 
        return countLeaves(tree.getLeft()) + countLeaves(tree.getRight());
    }

}

在您的代码中,您对同一案例有重复的if条件(我现在假设tree.emptyTree()返回true当且仅当两个孩子都{{1} }})。因此,第二个null无法访问 - > if

另一个问题是,当 <{em> but I'M NEVER HERE leftright时(另一方面)节点不是 - null)。只有在处理完整二进制树时才可以。

答案 1 :(得分:1)

以下代码行似乎是致命的缺陷:

if (tree.emptyTree()){

我认为当你真的想以1作为基本案例时,这种情况会被激活。试试这段代码:

public static int countLeaves(BinaryTree tree) {
    if (tree.getLeft() == null && tree.getRight() == null) {
        return 1;
    }
    else {
        return countLeaves(tree.getLeft()) +
               countLeaves(tree.getRight());
    }
}