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 相关文章推荐
jquery keypress,keyup,onpropertychange键盘事件
Jun 25 Javascript
javascript各浏览器中option元素的表现差异
Apr 07 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
Jan 31 Javascript
javascript 实现子父窗体互相传值的简单实例
Feb 17 Javascript
js判断文本框剩余可输入字数的方法
Feb 04 Javascript
BootstrapValidator超详细教程(推荐)
Dec 07 Javascript
Angular directive递归实现目录树结构代码实例
May 05 Javascript
react-router中的属性详解
Jun 01 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
Aug 03 Javascript
node.js监听文件变化的实现方法
Apr 17 Javascript
了解前端理论:rscss和rsjs
May 23 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
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
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
JS中Location使用详解
2015/05/12 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
python属于跨平台语言码
2020/06/09 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
python爬虫工具例举说明
2020/11/30 Python
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
银行会计职员个人的自我评价
2013/09/29 职场文书
初中体育教学随笔
2015/08/15 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
详解Django的MVT设计模式
2021/04/29 Python
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python