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 的 trim 函数的代码
Aug 13 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
Nov 05 Javascript
微信中一些常用的js方法汇总
Mar 12 Javascript
JS实现自动定时切换的简洁网页选项卡效果
Oct 13 Javascript
jquery动画效果学习笔记(8种效果)
Nov 13 Javascript
js判断文本框输入的内容是否为数字
Dec 23 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
Apr 17 Javascript
SelecT下拉框选中和取值的解决方法
Nov 22 Javascript
vue中element组件样式修改无效的解决方法
Feb 03 Javascript
原生实现一个react-redux的代码示例
Jun 08 Javascript
Angularjs之ngModel中的值验证绑定方法
Sep 13 Javascript
JS实现的字符串数组去重功能小结
Jun 17 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函数
2011/05/31 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
python通过索引遍历列表的方法
2015/05/04 Python
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
外企办公室竞聘演讲稿
2013/12/29 职场文书
打架检讨书100字
2014/01/19 职场文书
仓管员岗位责任制
2014/02/19 职场文书
代理人委托书
2014/08/01 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
语文复习计划
2015/01/19 职场文书
社会实践活动总结
2015/02/05 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS