删除二叉树节点

function remove (root, key) {
if (root == null){
return null;
}
var current = root;
if (current.key > key) {
current.left = remove(current.left);
return current.left;
}
else if (current.key < key) {
current.right = remove(current.right);
return current.right;
} else {
//只有一边有孩子或者没有孩子的情况
if (current.left == null) {
var rightNode = current.right;
return rightNode;
}
//只有一边有孩子或者没有孩子的情况
if (current.right == null) {
var leftNode = current.left;
return leftNode;
}
//寻找最小值
var rightNode = current.right;
while(rightNode.left) {
rightNode = rightNode.left
if(rightNode.left.left == null) {
// 删除最小值
rightNode.left = null;
}
}
rightNode.right = current.right;
rightNode.left = current.left;
return rightNode;
}
}

猜你喜欢

转载自www.cnblogs.com/CoderZX/p/10496467.html
今日推荐