0

我为这两种情况编写了代码,你必须找到继任者然后将其向上移动。它似乎有效,但是当我打印出这棵树时,它会产生两个孩子。例如我的树是

        /
       18
      /  \
     17  19

这只是我正在处理的树的一部分,当我尝试删除 18 时,它会删除它,但是当我打印出树时,打印输出是 17 17 19 19。下面是我的代码:

System.out.println("what is t " + T.getData()); 
System.out.println("what is t's right " + T.getRight().getData());
System.out.println("what is t's left " + T.getLeft().getData());
sucessor = findSucessor(T);
System.out.println("2 what is sucessor " + sucessor.getData());

T.getRight().setLeft(sucessor.getRight());
sucessor.setLeft(T.getLeft());
T.setData(sucessor.getData());

只要它不为空,我的继任者就会向右一并一直向左,所以在这种情况下,继任者是 19。

我认为它只是让我感到困惑的指针,我没有切断链接,但我不知道在哪里。

4

1 回答 1

0

你应该这样做:

successor.getParent().replace(successor, successor.getRight());
successor.setLeft(T.getLeft());
successor.setRight(T.getRight();
T.getParent().replace(T, successor);
于 2015-07-03T20:40:22.263 回答