JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例


Posted in Javascript onMarch 01, 2019

本文实例讲述了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;
  this.preOrder = preOrder;
  this.inOrder = inOrder;
  this.postOrder = postOrder;
  this.getMin = getMin;//查找最小值
  this.getMax = getMax;//查找最大值
  this.find = find;//查找给定值
}
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(current) {
      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;
        }
      }
    }
  }
}
// 中序遍历
function inOrder(node) {
  if(!(node == null)) {
    inOrder(node.left);
    console.log(node.show());
    inOrder(node.right);
  }
}
// 先序遍历
function preOrder(node) {
  if(!(node == null)) {
    console.log(node.show());
    preOrder(node.left);
    preOrder(node.right);
  }
}
// 后序遍历
function postOrder(node) {
  if(!(node == null)) {
    postOrder(node.left);
    postOrder(node.right);
    console.log("后序遍历"+node.show());
  }
}
/*
*查找BST上的最小值
*因为较小的值总是在左子节点上,在BST上查找最小值,只需要遍历左子树,直到找到最后一个节点。*/
function getMin(){
  var current = this.root;
  while(!(current.left == null)) {
    current = current.left;
  }
//  return current;//返回最小值所在的节点
  return current.data;//返回最小值
}
/*
 *查找BST上的最大值
 *因为较大的值总是在右子节点上,在BST上查找最大值,只需要遍历右子树,直到找到最后一个节点。*/
function getMax() {
  var current = this.root;
  while(!(current.right == null)) {
    current = current.right;
  }
//  return current;//返回最大值所在的节点
  return current.data;//返回最大值
}
/*
*查找给定值
*在BST上查找给定值,需要比较该值和当前节点上的值的大小。
*通过比较,就能确定如果给定值不在当前节点时,该向左遍历还是向右遍历。*/
function find(data) {
  var current = this.root;
  while(current != null) {
    if(current.data == data) {
      return current;
    }else if(data < current.data) {
      current = current.left;
    }else {
      current = current.right;
    }
  }
  return null;
}
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);
var min = nums.getMin();
console.log("最小值为: " + min);
var max = nums.getMax();
console.log("最大值为: " + max);
var find = nums.find("88");
console.log( find);
if(find != null){
  console.log("给定值为: " + find.data);
  console.log("给定值为: " + find.show());
}
var find = nums.find("37");
console.log( find);
if(find != null){
  console.log("给定值为: " + find.data);
  console.log("给定值为: " + find.show());
}

运行结果:

JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

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

Javascript 相关文章推荐
js select常用操作控制代码
Mar 16 Javascript
jQuery 数据缓存模块进化史详细介绍
Nov 19 Javascript
js如何判断不同系统的浏览器类型
Oct 28 Javascript
jQuery前端分页示例分享
Feb 10 Javascript
Extjs实现下拉菜单效果
Apr 01 Javascript
改变checkbox默认选中状态及取值的实现代码
May 26 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
Oct 10 Javascript
jquery实现超简单的瀑布流布局【推荐】
Mar 08 Javascript
react.js CMS 删除功能的实现方法
Apr 17 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
JavaScript相等运算符的九条规则示例详解
Oct 20 Javascript
JS倒计时两种实现方式代码实例
Jul 27 Javascript
Angular7.2.7路由使用初体验
Mar 01 #Javascript
vuex实现及简略解析(小结)
Mar 01 #Javascript
简单两步使用node发送qq邮件的方法
Mar 01 #Javascript
Vue实现类似Spring官网图片滑动效果方法
Mar 01 #Javascript
[原创]微信小程序获取网络类型的方法示例
Mar 01 #Javascript
使用JavaScript解析URL的方法示例
Mar 01 #Javascript
可能被忽略的一些JavaScript数组方法细节
Feb 28 #Javascript
You might like
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
js的flv视频播放器插件使用方法
2015/06/23 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
python爬虫超时的处理的实例
2018/12/19 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
职业规划书如何设计?
2014/01/09 职场文书
大学毕业感言100字
2014/02/03 职场文书
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
运动会演讲稿50字
2014/08/25 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
学校证明范文
2015/06/24 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技