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 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
javascript高级学习笔记整理
Aug 14 Javascript
通过jQuery源码学习javascript(一)
Dec 27 Javascript
js原生appendChild的bug解决心得分享
Jul 01 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
Aug 11 Javascript
AngularJS 视图详解及示例代码
Aug 17 Javascript
js+css3制作时钟特效
Oct 16 Javascript
让网站自动生成章节目录索引的多个js代码
Jan 07 Javascript
vue将对象新增的属性添加到检测序列的方法
Feb 24 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
Jun 24 Javascript
JavaScript观察者模式原理与用法实例详解
Mar 10 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 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
写一个用户在线显示的程序
2006/10/09 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
python实现扫描日志关键字的示例
2018/04/28 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Python如何读写二进制数组数据
2020/08/01 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
初中科学教学反思
2014/01/21 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
聘用意向书范本
2014/04/01 职场文书
中秋节主持词
2014/04/02 职场文书
会计专业自荐信范文
2019/05/22 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript