我正在try 删除二叉搜索树中的根 node .
Remove(1)给出正确的输出,但它不会改变树本身.
因此,如果我在调用bst.Remove(1)之后判断bst,则输出不同.为什么会这样呢?
如果我运行bst=bst.left||bst.right;
,我会得到正确的输出,这让我相信我的函数没有改变原始树.
remove(key) {
return this.removeImpl(key, this);
}
removeImpl(key, node){
if (node != null) {
if (key < node.value) {
// Key might be in the left subtree.
node.left = this.removeImpl(key, node.left);
} else if (key > node.value) {
node.right = this.removeImpl(key, node.right);
} else {
// Node found.
// Let's see if it has two children.
if (node.left && node.right) {
// Replace current node with
// predecessor data
node.value = this.minimum(node.right);
node.right = this.removeImpl(node.value, node.right);
} else {
// Only 1 child.
// Let's return the child that's valid.
node = node.left || node.right; //node to be removed becomes it's right or left child
}
}
}
return node;
}
var bst=new BST(1);
bst.insert(2);
bst.insert(3);
bst.insert(4);
bst.remove(1);