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 相关文章推荐
分享一个自己写的table表格排序js插件(高效简洁)
Oct 29 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
Nov 08 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
Mar 25 Javascript
javaScript 动态访问JSon元素示例代码
Aug 30 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
Mar 08 Javascript
JavaScript获取页面中表单(form)数量的方法
Apr 03 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
Mar 04 Javascript
jquery网页加载进度条的实现
Jun 01 jQuery
纯JS实现简单的日历
Jun 26 Javascript
javascript实现简易数码时钟
Mar 30 Javascript
jquery实现轮播图特效
Apr 12 jQuery
深入理解 ES6中的 Reflect用法
Jul 18 Javascript
微信小程序微信支付接入开发实例详解
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
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
javascript的BOM汇总
2015/07/16 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
[01:55]2014DOTA2国际邀请赛快报:国土生病 紧急去医院治疗
2014/07/10 DOTA
pygame学习笔记(4):声音控制
2015/04/15 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
用python实现对比两张图片的不同
2018/02/05 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
如何在python中写hive脚本
2019/11/08 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
彪马法国官网:PUMA法国
2019/12/15 全球购物
启动仪式策划方案
2014/06/14 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
工作证明格式及范本
2014/09/12 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
采购员工作总结范文
2015/08/12 职场文书
MySQL空间数据存储及函数
2021/09/25 MySQL