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 相关文章推荐
获取当前网页document.url location.href区别总结
May 10 Javascript
JavaScript RegExp方法获取地址栏参数(面向对象)
Mar 10 Javascript
javascript面向对象之Javascript 继承
May 04 Javascript
jquery 删除字符串最后一个字符的方法解析
Feb 11 Javascript
js数组方法扩展实现数组统计函数
Apr 09 Javascript
ExpressJS入门实例
Jan 14 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
Dec 28 Javascript
Web前端框架bootstrap实战【第一次接触使用】
Dec 28 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 Javascript
Vue.js项目部署到服务器的详细步骤
Jul 17 Javascript
vue-cli在 history模式下的配置详解
Nov 26 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
记录mysql性能查询过程的使用方法
2013/05/02 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
python中封包建立过程实例
2021/02/18 Python
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
工商管理专业职业生涯规划
2014/01/01 职场文书
学校火灾防控方案
2014/06/09 职场文书
责任书范本大全
2015/05/11 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android
Python+pyaudio实现音频控制示例详解
2022/07/23 Python