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 相关文章推荐
ie focus bug 解决方法
Sep 03 Javascript
Ext 今日学习总结
Sep 19 Javascript
JS JSON对象转为字符串的简单实现方法
Nov 18 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
详解jQuery选择器
Dec 21 Javascript
bootstrap滚动监控器使用方法解析
Jan 13 Javascript
canvas压缩图片转换成base64格式输出文件流
Mar 09 Javascript
node中间层实现文件上传功能
Jun 11 Javascript
在微信小程序中渲染HTML内容的方法示例
Sep 28 Javascript
微信小程序使用字体图标的方法
May 23 Javascript
小程序两种滚动公告栏的实现方法
Sep 17 Javascript
eslint+prettier统一代码风格的实现方法
Jul 22 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将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
JavaScript 学习初步 入门教程
2010/03/25 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
python实现文本文件合并
2015/12/29 Python
Python ldap实现登录实例代码
2016/09/30 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
使用Python pip怎么升级pip
2020/08/11 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
建筑结构施工求职信
2014/07/11 职场文书
企业授权委托书范本
2014/09/22 职场文书
组织生活会发言材料
2014/12/15 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python