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 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
原生js实现跨浏览器获取鼠标按键的值
Apr 08 Javascript
获得Javascript对象属性个数的示例代码
Nov 21 Javascript
JavaScript框架(iframe)操作总结
Apr 16 Javascript
javascript委托(Delegate)blur和focus用法实例分析
May 26 Javascript
jquery密码强度校验
Dec 02 Javascript
JavaScript html5 canvas绘制时钟效果(二)
Mar 27 Javascript
JS动态创建元素的两种方法
Apr 20 Javascript
js获取上传文件的绝对路径实现方法
Aug 02 Javascript
详解JavaScript常量定义
Jan 03 Javascript
详解webpack+angular2开发环境搭建
Jun 28 Javascript
JS数组转字符串实现方法解析
Sep 04 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
mysq GBKl乱码
2006/11/28 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
js原生态函数中使用jQuery中的 $(this)无效的解决方法
2011/05/25 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
在Python中处理时间之clock()方法的使用
2015/05/22 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
应聘自荐书
2013/10/08 职场文书
医学护理毕业生自荐信
2013/11/07 职场文书
科研先进个人典型材料
2014/01/31 职场文书
测绘工程专业求职信
2014/07/15 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
小学见习报告
2014/10/31 职场文书
党支部综合考察意见
2015/06/01 职场文书