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 相关文章推荐
分享20个提升网站界面体验的jQuery插件
Dec 15 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 Javascript
深入解析JavaScript编程中的this关键字使用
Nov 09 Javascript
javascript下拉列表中显示树形菜单的实现方法
Nov 17 Javascript
Bootstrap每天必学之表格
Nov 23 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
Dec 03 Javascript
一起学写js Calender日历控件
Apr 14 Javascript
jQuery侧边栏实现代码
May 06 Javascript
微信小程序 wxapp内容组件 icon详细介绍
Oct 31 Javascript
JS创建对象的写法示例
Nov 04 Javascript
vue实现日历备忘录功能
Sep 24 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若干单维数组遍历方法的比较
2011/09/20 PHP
php unset全局变量运用问题的深入解析
2013/06/17 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
浅析Python 中整型对象存储的位置
2016/05/16 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
在python中安装basemap的教程
2018/09/20 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
全国道德模范事迹
2014/02/01 职场文书
青春励志演讲稿
2014/04/29 职场文书
论群众路线学习笔记
2014/11/06 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
Javascript webpack动态import
2022/04/19 Javascript