当我添加新节点时,我试图更新二进制搜索树中每个节点的高度。假设每个插入的位置正确,为什么在运行时出现无限循环:
BinarySearchTree<Integer> bst = new BinarySearchTree<>((Integer x, Integer y) -> x < y);
int[] a = new int[] { 4,8 };
for (Integer key : a)
bst.insert(key);
bst.updateHeights(bst.root.right);
updateHeights方法为:
public void updateHeights(Node k) {
while(k.parent!=null) {
k.parent.height=heightHelper(k.parent);
updateHeights(k.parent);
}
}
和heightHelper方法是:
private int heightHelper(Node p){
{
if (p == null)
return 0;
else
{
/* compute the depth of each subtree */
int lDepth = heightHelper(p.left);
int rDepth = heightHelper(p.right);
/* use the larger one */
if (lDepth > rDepth)
return (lDepth + 1);
else
return (rDepth + 1);
}
}
它的高度合适,但是从不中断while循环。另外,我打印了bst.root.parent,它为null,因此当在while循环中传递根的父节点时,它应该在fisrt递归调用后中断。抱歉,这是一个愚蠢的错误/问题。预先感谢。