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
jquery 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
解析John Resig Simple JavaScript Inheritance代码
Dec 03 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
Aug 18 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
Oct 31 Javascript
浅谈javascript中this在事件中的应用
Feb 15 Javascript
js实现九宫格图片半透明渐显特效的方法
Feb 16 Javascript
JS for循环中i++ 和 ++i的区别介绍
Jul 20 Javascript
详解Vue监听数据变化原理
Mar 08 Javascript
angularJs中$http获取后台数据的实例讲解
Aug 08 Javascript
vue-router动态设置页面title的实例讲解
Aug 30 Javascript
JS轮播图的实现方法2
Aug 25 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 array_keys 返回数组的键名
2016/10/25 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
php微信开发之图片回复功能
2018/06/14 PHP
写js时遇到的一些小问题
2010/12/06 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python选课系统开发程序
2016/09/02 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
Python装饰器结合递归原理解析
2020/07/02 Python
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
python re模块和正则表达式
2021/03/24 Python
优秀教师事迹简介
2014/02/02 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL
nginx日志格式分析和修改
2022/04/28 Servers