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 相关文章推荐
input+select(multiple) 实现下拉框输入值
May 21 Javascript
js 鼠标点击事件及其它捕获
Jun 04 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
jQuery中size()方法用法实例
Dec 27 Javascript
javascript实现在线客服效果
Jul 15 Javascript
JS延时器提示框的应用实例代码解析
Apr 27 Javascript
基于JavaScript实现树形下拉框
Aug 10 Javascript
JavaScript类的写法
Sep 17 Javascript
实现单层json按照key字母顺序排序的示例
Dec 06 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
Dec 07 Javascript
Javascript实现时间倒计时功能
Nov 17 Javascript
vue 集成jTopo 处理方法
Aug 07 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邮件群发机实现代码
2016/02/16 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
Python选课系统开发程序
2016/09/02 Python
python中import reload __import__的区别详解
2017/10/16 Python
Python程序退出方式小结
2017/12/09 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
this关键字的含义
2015/04/08 面试题
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
计划生育证明书写要求
2014/09/17 职场文书
普通员工辞职信范文
2015/05/12 职场文书
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python
python和anaconda的区别
2022/05/06 Python