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 相关文章推荐
用js通过url传参把数据从一个页面传到另一个页面
Sep 01 Javascript
jQuery常用的一些技巧汇总
Mar 26 Javascript
jquery输入数字随机抽奖特效的简单实现代码
Jun 10 Javascript
Bootstrap零基础入门教程(二)
Jul 18 Javascript
详解Angular开发中的登陆与身份验证
Jul 27 Javascript
bootstrap警告框使用方法解析
Jan 13 Javascript
js实现简单的计算器功能
Jan 16 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
Apr 11 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
js常见遍历操作小结
Jun 06 Javascript
js实现详情页放大镜效果
Oct 28 Javascript
Vue页面渲染中key的应用实例教程
Jan 12 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
PHP中GET变量的使用
2006/10/09 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
Symfony的安装和配置方法
2016/03/17 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
QQ登录简单实现代码
2021/03/09 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
Python中为什么要用self探讨
2015/04/14 Python
python批量提取word内信息
2015/08/09 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
python如何基于redis实现ip代理池
2020/01/17 Python
web页面录屏实现
2019/02/12 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
建筑实习自我鉴定
2013/10/18 职场文书
科室工作的个人自我评价
2013/10/30 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
礼仪培训心得体会
2016/01/22 职场文书
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
Elasticsearch 数据类型及管理
2022/04/19 Python
Python数组变形的几种实现方法
2022/05/30 Python
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang