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代码
Mar 11 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
使用jquery动态加载javascript以减少服务器压力
Oct 29 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
Nov 08 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
jQuery中DOM常见操作实例小结
Aug 01 jQuery
vue项目中极验验证的使用代码示例
Dec 03 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
Feb 03 Javascript
uin-app+mockjs实现本地数据模拟
Aug 26 Javascript
js实现贪吃蛇游戏 canvas绘制地图
Sep 09 Javascript
使用jQuery实现购物车
Oct 29 jQuery
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
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
vue监听scroll的坑的解决方法
2017/09/07 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
python类参数self使用示例
2014/02/17 Python
爬山算法简介和Python实现实例
2014/04/26 Python
Python编码爬坑指南(必看)
2016/06/10 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
Pandas标记删除重复记录的方法
2018/04/08 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
python加载自定义词典实例
2019/12/06 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
2014年乡镇民政工作总结
2014/12/02 职场文书
优秀党员申报材料
2014/12/18 职场文书
小型婚礼主持词
2015/06/30 职场文书
环保宣传语大全
2015/07/13 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL