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 图片上传预览-兼容标准
Jun 01 Javascript
jquery tablesorter.js 支持中文表格排序改进
Dec 09 Javascript
写js时遇到的一些小问题
Dec 06 Javascript
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
js实现感应鼠标图片透明度变化的方法
Feb 20 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
深入分析javascript中console命令
Aug 14 Javascript
Javascript实现图片懒加载插件的方法
Oct 20 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
图片加载完成再执行事件的实例
Nov 16 Javascript
JavaScript实现拖拽和缩放效果
Aug 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跨站攻击实例分析
2014/10/28 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
tornado捕获和处理404错误的方法
2014/02/26 Python
python中的字典详细介绍
2014/09/18 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
pip命令无法使用的解决方法
2018/06/12 Python
对Python w和w+权限的区别详解
2019/01/23 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
Django之路由层的实现
2019/09/09 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
Python小白垃圾回收机制入门
2020/06/09 Python
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
室内设计自我鉴定
2013/10/15 职场文书
烹调加工管理制度
2014/02/04 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
读书笔记格式
2015/07/02 职场文书
mysql序号rownum行号实现方式
2022/12/24 MySQL