删除二叉树节点

Posted coderzx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除二叉树节点相关的知识,希望对你有一定的参考价值。

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;
}
}

以上是关于删除二叉树节点的主要内容,如果未能解决你的问题,请参考以下文章

数据结构—二叉树如何删除一个结点二叉树排序树和二叉搜索树的遍历

如何删除一棵普通二叉树的叶子结点?

搜索二叉树

二叉树

数据结构 二叉树 用二叉链链表存储结构 写出删除二叉树所有的叶子节点的算法

[学习记录]二叉树删除