我想了解更多關於二叉樹的知識,並且我遇到了關於如何找到後繼節點(當試圖刪除節點時)的方法,但我很難理解它的一部分。 這是代碼。這段代碼爲什麼需要從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語句是必要的?
你自己想出這個最簡單的方法就是運行代碼並觀察兩者之間的區別。 – Carcigenicate
說實話,沒有仔細閱讀核心*,這看起來不像任何普通的「在二叉樹中找到任何東西」的實現,因爲它**修改了樹。然而,一個splay樹通過將查詢的節點移動到樹頂部來修改樹,但是問題中的代碼還不足以實現這一點。 –
@Carcigenicate這是真的!我會盡力做到這一點。 –