我正在尝试计算二叉树的叶子,但递归函数总是返回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());
}
}
答案 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
或 left
为right
时(另一方面)节点不是 - 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());
}
}