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 相关文章推荐
JS批量操作CSS属性详细解析
Dec 16 Javascript
使用delegate方法为一个tr标签加一个链接
Jun 27 Javascript
jQuery取消ajax请求的方法
Jun 09 Javascript
AngularJS过滤器详解及示例代码
Aug 16 Javascript
利用jquery获取select下拉框的值
Nov 23 Javascript
vue 2.0组件与v-model详解
Mar 27 Javascript
Vue实现购物车功能
Apr 27 Javascript
详解Node.js access_token的获取、存储及更新
Jun 20 Javascript
JQuery选中select组件被选中的值方法
Mar 08 jQuery
微信小程序自定义导航栏(模板化)
Nov 15 Javascript
vue项目中使用bpmn-自定义platter的示例代码
May 11 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 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 file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
php导入模块文件分享
2015/03/17 PHP
PHP 裁剪图片
2021/03/09 PHP
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
用python写asp详细讲解
2013/12/16 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
体育教师自荐信范文
2013/12/16 职场文书
学习决心书
2014/03/11 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
高三英语教学计划
2015/01/23 职场文书
2016年记者节感言
2015/12/08 职场文书