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下操作css的float属性的特殊写法
Aug 22 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
Aug 26 Javascript
javascript+canvas实现刮刮卡抽奖效果
Jul 29 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
浅谈JavaScript的计时器对象
Dec 26 Javascript
JS之if语句对接事件动作逻辑(详解)
Jun 28 Javascript
使用ajax的post同步执行(实现方法)
Dec 21 Javascript
vue解决弹出蒙层滑动穿透问题的方法
Sep 22 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
vue.config.js常用配置详解
Nov 14 Javascript
手把手带你入门微信小程序新框架Kbone的使用
Feb 25 Javascript
uni-app如何页面传参数的几种方法总结
Apr 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实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
Javascript函数的参数
2015/07/16 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
利用Python为iOS10生成图标和截屏
2016/09/24 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
Python实现的概率分布运算操作示例
2017/08/14 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
蔻驰美国官网:COACH美国
2016/08/18 全球购物
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
优秀毕业生求职信范文
2014/01/02 职场文书
英文留学推荐信范文
2014/01/25 职场文书
党员公开承诺书范文
2014/03/25 职场文书
企业挂职心得体会
2014/09/10 职场文书
批评与自我批评范文
2014/10/15 职场文书
整改报告格式
2014/11/06 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书