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 相关文章推荐
跟着JQuery API学Jquery 之三 筛选
Apr 09 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
Aug 10 Javascript
js实现模拟计算器退格键删除文字效果的方法
May 07 Javascript
javascript密码强度校验代码(两种方法)
Aug 10 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
Oct 21 Javascript
ES6中非常实用的新特性介绍
Mar 10 Javascript
Bootstrap每天必学之滚动监听
Mar 16 Javascript
Angularjs 滚动加载更多数据
Mar 17 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
Mar 26 Javascript
极力推荐10个短小实用的JavaScript代码段
Aug 03 Javascript
JavaScript 中调用 Kotlin 方法实例详解
Jun 09 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
Nov 10 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
我的论坛源代码(一)
2006/10/09 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
Angular实现响应式表单
2017/08/04 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python3实现Web网页图片下载
2016/01/28 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
Python发展史及网络爬虫
2019/06/19 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
C#面试题
2016/05/06 面试题
个人简历中的自我评价范例
2013/10/29 职场文书
汽车专业求职信
2014/06/05 职场文书
反腐倡廉标语
2014/06/24 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
高质量“欢迎词”
2019/04/03 职场文书