JavaScript数据结构之二叉查找树的定义与表示方法


Posted in Javascript onApril 12, 2017

本文实例讲述了JavaScript数据结构之二叉查找树的定义与表示方法。分享给大家供大家参考,具体如下:

树是一种非线性的数据结构,以分层的方式存储数据。树被用来存储具有层级关系的数据,比如文件系统中的文件;树还被用来存储有序列表。这里将研究一种特殊的树:二叉树。选择树而不是那些基本的数据结构,是因为在二叉树上进行查找非常快(而在链表上查找则不是这样),为二叉树添加或删除元素也非常快(而对数组执行添加或删除操作则不是这样)。

树是n个结点的有限集。最上面的为,下面为根的子树。树的节点包含一个数据元素及若干指向其子树的分支。结点拥有的子树称为结点的度。度为0的结点称为叶子终端结点。度不为0的结点称为非终端结点分支结点树的度是树内各结点的度的最大值。结点的层次从根开始定义,根为第0层。树中结点的最大层次称为树的深度高度

二叉树是一种特殊的树,它的子节点个数不超过两个。二叉树具有一些特殊的计算性质,使得在它们之上的一些操作异常高效。通过将子节点的个数限定为 2,可以写出高效的程序在树中插入、查找和删除数据。

在使用 JavaScript 构建二叉树之前,需要给我们关于树的词典里再加两个新名词。一个父节点的两个子节点分别称为左节点和右节点。在一些二叉树的实现中,左节点包含一组特定的值,右节点包含另一组特定的值。二叉查找树是一种特殊的二叉树,相对较小的值保存在左节点中,较大的值保存在右节点中。这一特性使得查找的效率很高,对于数值型和非数值型的数据,比如单词和字符串,都是如此。

二叉查找树由节点组成,所以我们要定义一个Node对象,代码如下:

function Node(data,left,right){//结点类
    this.data=data;
    this.left=left;
    this.right=right;
    this.show=show;
}
function show(){//显示节点中数据
    return this.data;
}

其中left和right分别用来指向左右子结点。

接下来需要创建二叉查找树的类,代码如下:

function BST(){//树类
    this.root=null;
    this.insert=insert;
    this.inOrder=inOrder;
    this.preOrder=preOrder;
    this.postOrder=postOrder;
}

接下来是插入节点的代码。遍历小的插左边,大的插右边。代码如下:

function insert(data){//插入操作
    var n=new Node(data,null,null);
    if(this.root==null){//第一个元素
      this.root=n;
    }else{
      var current=this.root;//永远指向根节点
      var parent;
      while(true){//一直运行直到找到左结点或右结点为止
        parent=current;
        if(data<current.data){
          current=current.left;
          if(current==null){//如果没有左节点
            parent.left=n;
            break;
          }
        }else{
          current=current.right;
          if(current==null){//如果没有右节点
            parent.right=n;
            break;
          }//如果有右节点,则跳到while重新执行,将该节点作为parent重新开始判断
        }
      }
    }
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Prototype使用指南之string.js
Jan 10 Javascript
Prototype Number对象 学习
Jul 19 Javascript
JavaScript Event学习第七章 事件属性
Feb 07 Javascript
javascript动态加载二
Aug 22 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
Aug 26 Javascript
JavaScript 实现的checkbox经典实例分享
Oct 16 Javascript
bootstrap导航、选项卡实现代码
Dec 28 Javascript
详解webpack异步加载业务模块
Jun 23 Javascript
js原生日历的实例(推荐)
Oct 31 Javascript
详解vue 数据传递的方法
Apr 19 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
May 15 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
微信小程序微信支付接入开发实例详解
Apr 12 #Javascript
JavaScript数据结构之广义表的定义与表示方法详解
Apr 12 #Javascript
JavaScript数据结构之数组的表示方法示例
Apr 12 #Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
Apr 12 #Javascript
Vue生命周期示例详解
Apr 12 #Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
Apr 12 #Javascript
easyui-datagrid特殊字符不能显示的处理方法
Apr 12 #Javascript
You might like
咖啡的传说和历史
2021/03/03 新手入门
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
33种Javascript 表格排序控件收集
2009/12/03 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
npm qs模块使用详解
2020/02/07 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
VC++笔试题
2014/10/13 面试题
财务人员个人自荐信范文
2013/09/26 职场文书
预备党员的自我评价
2014/03/12 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
电影焦裕禄观后感
2015/06/09 职场文书