【发布时间】:2017-06-04 18:59:10
【问题描述】:
我正在尝试编写一个通过给定值从 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;
}
我能想出一些技巧让它返回已删除的节点,还是我应该研究迭代算法(如果是这样,如果你能给我提供链接,我将不胜感激)。
【问题讨论】: