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 相关文章推荐
Javascript attachEvent传递参数的办法
Dec 14 Javascript
读jQuery之三(构建选择器)
Jun 11 Javascript
jquery多选项卡效果实例代码(附效果图)
Mar 23 Javascript
jquery动态添加删除div 具体实现
Jul 20 Javascript
微信JS接口汇总及使用详解
Jan 09 Javascript
JavaScript实现动态删除列表框值的方法
Aug 12 Javascript
jQuery中delegate()方法的用法详解
Oct 13 Javascript
Bootstrap列表组学习使用
Feb 09 Javascript
微信小程序发送短信验证码完整实例
Jan 07 Javascript
原生js实现each方法实例代码详解
May 27 Javascript
js实现select下拉框选择
Jan 11 Javascript
JS使用for in有序获取对象数据
May 19 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
php语言流程控制中的主动与被动
2012/11/05 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python实现带百分比的进度条
2016/06/28 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
python的列表List求均值和中位数实例
2020/03/03 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
中层干部考核评语
2015/01/04 职场文书
爱的承诺书
2015/01/20 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
男人帮观后感
2015/06/18 职场文书
担保书格式范文
2015/09/22 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电