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中的Location地址对象
Jan 16 Javascript
JavaScript DOM 添加事件
Feb 14 Javascript
用js实现in_array的方法
Nov 05 Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
用jquery等比例控制图片宽高的具体实现
Jan 28 Javascript
javascript中使用正则计算中文长度的例子
Apr 29 Javascript
JavaScript实现数据类型的相互转换
Mar 06 Javascript
Javascript同时声明一连串(多个)变量的方法
Jan 23 Javascript
javascript面向对象三大特征之多态实例详解
Jul 24 Javascript
JS制作简易计算器的实例代码
Jul 04 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
微信小程序微信支付接入开发实例详解
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用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
PDO::commit讲解
2019/01/27 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
利用python爬取散文网的文章实例教程
2017/06/18 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
企业办公室主任岗位职责
2014/02/19 职场文书
会走路的树教学反思
2014/02/20 职场文书
暑期社会实践感言
2014/02/25 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
党员剖析材料范文
2014/09/30 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
单位作风建设自查报告
2014/10/23 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
金榜题名主持词
2015/07/02 职场文书
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python