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 相关文章推荐
一些相见恨晚的 JavaScript 技巧
Apr 25 Javascript
javascript编码的几个方法详细介绍
Jan 06 Javascript
js购物车实现思路及代码(个人感觉不错)
Dec 23 Javascript
JavaScript中的ubound函数使用实例
Nov 04 Javascript
JavaScript forEach()遍历函数使用及介绍
Jul 08 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
Vue 实现树形视图数据功能
May 07 Javascript
深入剖析Node.js cluster模块
May 23 Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 Javascript
移动端吸顶fixbar的解决方案详解
Jul 17 Javascript
jquery使用echarts实现有向图可视化功能示例
Nov 25 jQuery
微信小程序vant弹窗组件的实现方式
Feb 21 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
推荐一篇入门级的Class文章
2007/03/19 PHP
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
PHP array 的加法操作代码
2010/07/24 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
Use Word to Search for Files
2007/06/15 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
Django 路由系统URLconf的使用
2018/10/11 Python
提升python处理速度原理及方法实例
2019/12/25 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
励志演讲稿800字
2014/08/21 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
排球赛新闻稿
2015/07/17 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
Python加密与解密模块hashlib与hmac
2022/06/05 Python
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis