JavaScript数据结构之二叉树的删除算法介绍

 
JavaScript数据结构之二叉树的删除算法介绍
2017-04-14 08:12:57 /故事大全

本文实例讲述了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.left=removeNode(node.left,data);

return node;

}else{

node.right=removeNode(node.right,data);

return node;

}

}

所属专题:
如果您觉得本文或图片不错,请把它分享给您的朋友吧!

 
故事大全
 
版权所有- © 2012-2015 · 故事大全 SITEMAP站点地图手机看故事 站点地图