私はバイナリツリーについてもっと学びたいと思っています。ノードを削除しようとすると、後継ノードを見つける方法について知りましたが、その一部を理解するのは苦労しています。 コードは次のとおりです。このコードでBSTから削除するには、この行が必要なのはなぜですか?
private Node getSuccessor(Node delNode){
Node successorParent = delNode;
Node successor = delNode;
Node current = delNode.rightChild;
while(current != null){
successorParent = successor;
successor = current;
current = current.leftChild;
} // end of if
if(successor != delNode.rightChild){
successorParent.leftChild = successor.rightChild;
successor.rightChild = delNode.rightChild;
}
return successor;
}
whileループとその中に入っているものを完全に理解しています。私は理解していないことはif文とされ、具体的...
successor.rightChild = delNode.rightChild;
なぜ私は後続ノードの右の子にdelNodeの右の子を割り当てたいでしょう
? if文が必要な理由
これを自分で考え出す最も簡単な方法は、コードを実行して、2つの違いが何であるかを見ることです。 – Carcigenicate
正直言って、コア*を注意深く読まなくても、これは**ツリーを変更する**ので、通常の「何でも見つけてください」とは思われません。しかし、スプレイツリーは、クエリされたノードをツリーの先頭に移動することによってツリーを変更しますが、問題のコードではそれを行うには不十分です。 –
@Carcigenicateそれは本当です!私はそれをやろうとします。 –