1
我正在嘗試編寫一個方法,該方法可以通過給定的值從BST中刪除節點,並且我需要它來返回此刪除的值。我發現了遞歸實現的各種示例,但由於它們的本質,它們不能返回刪除的節點,而是返回根節點。下面是我現在從二進制搜索樹中返回已刪除的節點
public TreeNode remove(TreeNode node, int data) {
if (null == node) {
return null;
}
if (data < node.st.getkey()) {
node.left = remove(node.left, data);
} else if (data > node.st.getkey()) {
node.right = remove(node.right, data);
} else { // case for equality
if (node.left != null && node.right != null) {
TreeNode minInRightSubTree = min(node.right);
copyData(node , minInRightSubTree);
node.right = remove(node.right, minInRightSubTree.st.getkey());
} else {
if (node.left == null && node.right == null) {
node = null;
} else {// one child case
TreeNode deleteNode = node;
node = (node.left != null) ? (node.left) : (node.right);
deleteNode = null;
}
}
}
return node;
}
我可以拿出一些黑客攻擊,使其返回刪除節點,或者我應該考慮的迭代算法(如果有的話,我會很感激,如果你可以幫我介紹了鏈接)。
我剛想出聲明一個輔助公共節點,將舉行lastRemovedNode的想法。 –