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包装对象使用介绍
Aug 29 Javascript
javascript进行四舍五入方法汇总
Dec 16 Javascript
jQuery内容过滤选择器用法分析
Feb 10 Javascript
Lab.js初次使用笔记
Feb 28 Javascript
JavaScript基本语法讲解
Jun 03 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
Sep 19 Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 Javascript
JSONP原理及应用实例详解
Sep 13 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
Jan 08 Javascript
微信小程序事件流原理解析
Nov 27 Javascript
vue组件中实现嵌套子组件案例
Aug 31 Javascript
vue 实现弹窗关闭后刷新效果
Apr 08 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
构建简单的Webmail系统
2006/10/09 PHP
PHP 时间日期操作实战
2011/08/26 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
JScript中的undefined和&quot;undefined&quot;的区别
2007/03/08 Javascript
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
javascript实现表单验证
2016/01/29 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
python pygame实现方向键控制小球
2019/05/17 Python
python中update的基本使用方法详解
2019/07/17 Python
python 标准差计算的实现(std)
2019/07/29 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
python实现双人五子棋(终端版)
2020/12/30 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
《商鞅南门立木》教学反思
2014/02/16 职场文书
投资合作协议书范本
2014/04/17 职场文书
公务员政审单位鉴定材料
2014/05/16 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
给医院的感谢信
2015/01/21 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书