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 相关文章推荐
aspx中利用js实现确认删除代码
Jul 22 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
Mar 14 Javascript
jQuery基础框架浅入剖析
Dec 27 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
Jun 04 Javascript
css结合js制作下拉菜单示例代码
Feb 27 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
Sep 23 Javascript
Javascript writable特性介绍
Feb 27 Javascript
基于jQuery的checkbox全选问题分析
Nov 18 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
Feb 10 Javascript
简单谈谈vue的过渡动画(推荐)
Oct 11 Javascript
使用proxy实现一个更优雅的vue【推荐】
Jun 19 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
May 20 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的FTP学习(三)
2006/10/09 PHP
php和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
php生出随机字符串
2017/07/06 PHP
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python之import机制详解
2014/07/03 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
html5的localstorage详解
2017/05/09 HTML / CSS
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
继电保护工岗位职责
2014/01/05 职场文书
团日活动总结
2014/04/28 职场文书
设备售后服务承诺书
2014/05/30 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
运动会演讲稿300字
2014/08/25 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
Vue的过滤器你真了解吗
2022/02/24 Vue.js
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫