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 相关文章推荐
小议Function.apply() 之一------(函数的劫持与对象的复制)
Nov 30 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
Sep 28 Javascript
JS的get和set使用示例
Feb 20 Javascript
js调试系列 初识控制台
Jun 18 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
Nov 25 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
Dec 08 Javascript
bootstrap滚动监控器使用方法解析
Jan 13 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
Vue.js如何实现路由懒加载浅析
Aug 14 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
Sep 11 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
May 12 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
Jul 03 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
雄兵连:第三季确定会出,不过时间未定,鹤熙是第三季的主角!
2020/03/13 国漫
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
Python Requests 基础入门
2016/04/07 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
python回调函数中使用多线程的方法
2017/12/25 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
Django操作session 的方法
2020/03/09 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
大学生专业个人学习的自我评价
2013/10/26 职场文书
平安建设实施方案
2014/03/19 职场文书
银行委托书范本
2014/04/04 职场文书
司法助理专业自荐书
2014/06/13 职场文书
我的中国梦口号
2014/06/16 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
创先争优个人总结
2015/03/04 职场文书
cf战队宣传语
2015/07/13 职场文书
2016国庆促销广告语
2016/01/28 职场文书
html5调用摄像头截图功能
2022/01/18 Javascript
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS