更新二分搜索树的高度时发生无限循环

时间:2018-10-04 01:52:19

标签: height binary-search-tree infinite-loop

当我添加新节点时,我试图更新二进制搜索树中每个节点的高度。假设每个插入的位置正确,为什么在运行时出现无限循环:

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递归调用后中断。抱歉,这是一个愚蠢的错误/问题。预先感谢。

0 个答案:

没有答案