JavaScript

超轻量级php框架startmvc

JavaScript数据结构之二叉树的删除算法示例

更新时间:2020-05-05 22:36:01 作者:startmvc
本文实例讲述了JavaScript数据结构之二叉树的删除算法。分享给大家供大家参考,具体如下

本文实例讲述了JavaScript数据结构之二叉树的删除算法。分享给大家供大家参考,具体如下:

从二叉查找树上删除节点的操作复杂程度取决于删除哪个节点。如果删除没有子节点的节点就非常简单,如果节点只有一个子节点,不管是左子节点还是右子节点,就变得稍微有点复杂,如果节点包含两个子节点就最复杂。

如果待删除节点是叶子节点,那么只需要将从父节点指向它的链接指向null

如果待删除节点只包含一个子节点,那么原本指向它的节点就得使其指向它的子节点

如果待删除节点包含两个子节点,那么我们可以采用两种方式,一种是查找待删除节点左子树上的最大值,一种是查找待删除节点右节点上的最小值。我们采取后者,找到最小值后,将临时节点上的值复制到待删除节点,然后再删除临时节点。

删除操作的代码如下:


function getSmallest(node){//查找最小节点
 while(node.left!=null){
 node=node.left;
 }
 return node;
}
function remove(data){
 root=removeNode(this.root,data);//将根节点转换
}
function removeNode(node,data){
 if(node==null){
 return null;
 }
 if(data==node.data){
 //如果没有子节点
 if(node.right==null&&node.left==null){
 return null;//直接将节点设为空
 }
 //如果没有左子节点
 if(node.left==null){
 return node.right;//直接指向其右节点
 }
 //如果没有右子节点
 if(node.right==null){
 return node.left;
 }
 //如果有两个节点
 if(node.right!=null&&node.left!=null){
 var tempNode=getSmallest(node.right);//找到最小的右节点
 node.data=tempNode.data;
 node.right=removeNode(node.right,tempNode.data);//依次寻找
 return node;
 }
 }else if(data<node.data){
 node.left=removeNode(node.left,data);
 return node;
 }else{
 node.right=removeNode(node.right,data);
 return node;
 }
}

JavaScript 数据结构 二叉树 删除 算法