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


Posted in Javascript onApril 13, 2017

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
javascript 验证日期的函数
Mar 18 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
Jun 28 Javascript
关于js中for in的缺陷浅析
Dec 02 Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
Sep 09 Javascript
jQuery实现模拟flash头像裁切上传功能示例
Dec 11 Javascript
Ajax基础知识详解
Feb 17 Javascript
react实现换肤功能的示例代码
Aug 14 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
在vue中使用jsx语法的使用方法
Sep 30 Javascript
基于JS实现table导出Excel并保留样式
May 19 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
Oct 28 Javascript
JavaScript数据结构之二叉树的查找算法示例
Apr 13 #Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
Apr 13 #jQuery
JavaScript中this的用法及this在不同应用场景的作用解析
Apr 13 #Javascript
vue如何引用其他组件(css和js)
Apr 13 #Javascript
JavaScript数据结构之二叉树的遍历算法示例
Apr 13 #Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
Apr 13 #jQuery
vue组件如何被其他项目引用
Apr 13 #Javascript
You might like
用PHP和ACCESS写聊天室(六)
2006/10/09 PHP
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
深入PHP数据加密详解
2013/06/18 PHP
php获取文件内容最后一行示例
2014/01/09 PHP
php生成html文件方法总结
2014/12/01 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
python放大图片和画方格实现算法
2018/03/30 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
CK美国官网:Calvin Klein
2016/08/26 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
后勤人员岗位职责
2013/12/17 职场文书
《花木兰》教学反思
2014/04/09 职场文书
南京青奥会口号
2014/06/12 职场文书
统计学教授推荐信
2014/09/18 职场文书
先进基层党组织材料
2014/12/25 职场文书
工程质量保证书
2015/05/09 职场文书
生产实习心得体会范文
2016/01/22 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书