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里的条件判断
Feb 27 Javascript
javascript获取当前日期时间及其它操作函数
Jan 11 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
Jul 31 Javascript
jquery validate poshytip 自定义样式
Nov 26 Javascript
按下Enter焦点移至下一个控件的实现js代码
Dec 11 Javascript
JavaScript中的console.assert()函数介绍
Dec 29 Javascript
JS阻止事件冒泡行为和闭包的方法
Jun 16 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
Aug 11 Javascript
Vue computed计算属性的使用方法
Jul 14 Javascript
Vue组件之Tooltip的示例代码
Oct 18 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
Aug 28 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
Nov 11 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缓冲区为你的站点加速
2015/10/10 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
Python实现学校管理系统
2018/01/11 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
python调用百度语音REST API
2018/08/30 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
客服文员岗位职责
2013/11/29 职场文书
会计专业毕业生求职信分享
2014/01/03 职场文书
矫正人员思想汇报
2014/01/08 职场文书
思想品德课教学反思
2014/02/10 职场文书
个人简历求职信范文
2015/03/20 职场文书
上下班时间调整通知
2015/04/23 职场文书
活动新闻稿范文
2015/07/17 职场文书
推广普通话主题班会
2015/08/17 职场文书
PyTorch的Debug指南
2021/05/07 Python
go web 预防跨站脚本的实现方式
2021/06/11 Golang