Java中的Remove-Method无法正常工作

时间:2016-01-09 18:29:38

标签: java avl-tree removechild

我只是想让你快速浏览我的AVL-Tree,我正在编程。我写了一个AVL树,因此删除了一个方法。这个方法的问题在于,节点的父节点的另一个孩子(请再次阅读,对不起,这听起来有点复杂),我删除了,没有打印出来,所以被删除,我不知道为什么。代码如下:

@Override
public void remove(E value) throws NoSuchElementException {
    if(!contains(value)) throw new NoSuchElementException("Doesn't exist!");
    else{
        root = remove(finds(value).value, root);
    }
}

private Node remove(E x, Node t){


     if (t==null)    {
          System.out.println("Sorry but you're mistaken, " + t + " doesn't exist in this tree :)\n");
          return null;
      }
      System.out.println("Remove starts... " + t.value + " and " + x);

      if (x.compareTo(t.value) < 0 ) {
          t.left = remove(x,t.left);



      }
      else if (x.compareTo(t.value) > 0) {
          t.right = remove(x,t.right);


      }

      else if(t.left != null) {
          t.value = biggest(t.left).value;
          remove(t.value, t.left);


      }

      else
          t = (t.left != null) ? t.left : t.right;


      return t;
}

AuDTree<Integer> a = new AuDTree<Integer>();
    a.insert(7);
    a.insert(5);
    a.insert(9);
    a.insert(4);
    a.insert(6);
    a.insert(10);
    a.insert(8);
    a.remove(4);

这是测试。当我删除&#34; 4&#34;时,&#34; 6&#34;也被删除了。当我删除&#34; 8&#34;时,&#34; 10&#34;被删除,等等。 AVL-Tree看起来像这样:

                                7
                           5        9
                        4     6  8    10

事先谢谢你:)

0 个答案:

没有答案