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 相关文章推荐
JS字符串拼接在ie中都报错的解决方法
Mar 27 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
Mar 18 Javascript
AngularJS 实现JavaScript 动画效果详解
Sep 08 Javascript
详解jQuery中基本的动画方法
Dec 14 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 jQuery
vue实现留言板todolist功能
Aug 16 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
Jan 31 Javascript
vue 2.0 购物车小球抛物线的示例代码
Feb 01 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
May 17 Javascript
详解vue中组件参数
Jul 09 Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 Javascript
JavaScript实现动态留言板
Mar 16 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入门学习笔记之一
2010/10/12 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
js模拟类继承小例子
2010/07/17 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
python中ConfigParse模块的用法
2014/09/29 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
linux 下selenium chrome使用详解
2020/04/02 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
python interpolate插值实例
2020/07/06 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
网络方面基础面试题
2012/11/16 面试题
零件设计自荐信范文
2013/11/27 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
区域销售大会开幕词
2016/03/04 职场文书
2019年入党思想汇报
2019/03/25 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python