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中的Document文档对象
Jan 16 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
Aug 07 Javascript
提高jQuery性能的十个诀窍
Nov 14 Javascript
js 自动播放的实例代码
Nov 19 Javascript
深入分析Javascript跨域问题
Apr 17 Javascript
Javascript的表单验证长度
Mar 16 Javascript
Vue.js tab实现选项卡切换
May 16 Javascript
vue-resource拦截器设置头信息的实例
Oct 27 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
May 08 Javascript
Openlayers绘制聚合标注
Sep 28 Javascript
对vue生命周期的深入理解
Dec 03 Vue.js
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模板引擎SMARTY
2006/10/09 PHP
php5 图片验证码实现代码
2009/12/11 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
Node.js console控制台简单用法分析
2019/01/04 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
python实现文本去重且不打乱原本顺序
2016/01/26 Python
机器学习10大经典算法详解
2017/12/07 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
将python安装信息加入注册表的示例
2019/11/20 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
python飞机大战游戏实例讲解
2020/12/04 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
高中运动会入场词
2014/02/14 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
公司给客户的感谢信
2015/01/23 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL
Java数据结构之堆(优先队列)
2022/05/20 Java/Android