我的BST中的findMax()方法遇到问题。当我运行它时,我得到一个堆栈溢出错误(ha)。我似乎无法弄清楚究竟我做错了什么?任何见解都会非常感激。这是我到目前为止的代码。
public AnyType findMax() throws EmptyBSTException {
if ( isEmpty() )
throw new EmptyBSTException();
return findMax( root ).getElement();
}
private BinaryNode<AnyType> findMax( BinaryNode<AnyType> node ) {
if(root.getRight() == null) {
return root;
}
else {
return findMax(root.getRight())
}
}
答案 0 :(得分:1)
你几乎肯定想在你的第二个功能中到处写node
而不是root
。
答案 1 :(得分:0)
正如Codor所提到的,这可能与您正在测试代码的树有关。确保从root到leaves的路径中没有一个正确的子节点有一个循环引用备份到其中一个父节点。
但如果树本身超大,请尝试非递归替代(没有堆栈开销)
public AnyType findMax() throws EmptyBSTException {
if ( isEmpty() )
throw new EmptyBSTException();
BinaryNode<AnyType> node = root;
while (node.getRight() != null){
node = node.getRight();
}
return node.getElement();
}