JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例


Posted in Javascript onFebruary 21, 2019

本文实例讲述了JavaScript数据结构与算法之二叉树插入节点、生成二叉树。分享给大家供大家参考,具体如下:

javascript数据结构与算法-- 插入节点、生成二叉树

二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中

JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例

/*
*二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中
*
*
* */
/*用来生成一个节点*/
function Node(data, left, right) {
  this.data = data;//节点存储的数据
  this.left = left;
  this.right = right;
  this.show = show;
}
function show() {
  return this.data;
}
/*用来生成一个二叉树*/
function BST() {
  this.root = null;
  this.insert = insert;
}
/*将数据插入二叉树
  (1)设根节点为当前节点。
  (2)如果待插入节点保存的数据小于当前节点,则设新的当前节点为原节点的左节点;反
  之,执行第4步。
  (3)如果当前节点的左节点为null,就将新的节点插入这个位置,退出循环;反之,继续
  执行下一次循环。
  (4)设新的当前节点为原节点的右节点。
  (5)如果当前节点的右节点为null,就将新的节点插入这个位置,退出循环;反之,继续
  执行下一次循环。
* */
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) {//如果当前节点的左节点为null,就将新的节点插入这个位置,退出循环;反之,继续执行下一次while循环。
          parent.left = n;
          break;
        }
      }
      else {
        current = current.right;//待插入节点保存的数据小于当前节点,则设新的当前节点为原节点的左节点
        if (current == null) {
          parent.right = n;
          break;
        }
      }
    }
  }
}
var nums = new BST();
nums.insert(23);
nums.insert(45);
nums.insert(16);
nums.insert(37);
nums.insert(3);
nums.insert(99);
nums.insert(22);
console.log(nums);

使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
关于JavaScript定义类和对象的几种方式
Nov 09 Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 Javascript
浅谈javascript中的数据类型转换
Dec 27 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
ES6中Array.copyWithin()函数的用法实例详解
Sep 16 Javascript
JS运动特效之同时运动实现方法分析
Jan 24 Javascript
记一次webpack3升级webpack4的踩坑经历
Jun 12 Javascript
浅谈Vue组件单元测试究竟测试什么
Feb 05 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
May 26 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
Aug 06 Javascript
vue-openlayers实现地图坐标弹框效果
Sep 24 Javascript
ant design vue中表格指定格式渲染方式
Oct 28 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
Feb 21 #Javascript
Vue实现table上下移动功能示例
Feb 21 #Javascript
JavaScript数组、json对象、eval()函数用法实例分析
Feb 21 #Javascript
ES6基础之解构赋值(destructuring assignment)
Feb 21 #Javascript
ES6基础之展开语法(Spread syntax)
Feb 21 #Javascript
ES6基础之默认参数值
Feb 21 #Javascript
微信小程序HTTP接口请求封装的实现
Feb 21 #Javascript
You might like
写一个用户在线显示的程序
2006/10/09 PHP
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
php中动态变量用法实例
2015/06/10 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
js获取内联样式的方法
2015/01/27 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
Python变量和字符串详解
2017/04/29 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
Django如何实现上传图片功能
2019/08/16 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
小学假期安全广播稿
2014/09/28 职场文书
投标邀请书范本
2015/02/02 职场文书
小学英语教师研修感悟
2015/11/18 职场文书