我正在使用LinkedBinaryTree类中的一个方法来计算树中的子项数。我的代码如下,但是当我在我的驱动程序中运行它时,我会进入一个无限循环。
public int children(BinaryTreeNode<T> node) {
int children = 0;
if(node.getLeft() != null){
children = 1 + children(node);
}
else if(node.getRight() != null){
children = children + 1 + children(node);
}
return children;
}
特别是,这一行会导致StackOverflow错误,我无法超越它:
children = 1 + children(node);
任何人都知道如何帮助我纠正我的代码?我用逻辑忽略了什么?感谢帮助。
答案 0 :(得分:0)
public int children(BinaryTreeNode<T> node) {
if (node == null)
return 0;
return 1 + children(node.left()) + children(node.right());
}
答案 1 :(得分:0)
你应该传递node-&gt;在递归调用方法时,left或node-&gt; right。更正后的代码:
public int children(BinaryTreeNode<T> node) {
int children = 0;
if(node.getLeft() != null){
children = 1 + children(node.getLeft());
}
else if(node.getRight() != null){
children = children + 1 + children(node.getRight());
}
return children;
}