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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
利用腾讯的ip地址库做ip物理地址定位
Jul 24 Javascript
子窗体与父窗体传值示例js代码
Aug 01 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
全面解析Bootstrap表单使用方法(表单样式)
Nov 24 Javascript
js添加绑定事件的方法
May 15 Javascript
js实现鼠标左右移动,图片也跟着移动效果
Jan 25 Javascript
一个简易的js图片轮播效果
Jul 22 Javascript
vue axios 在页面切换时中断请求方法 ajax
Mar 05 Javascript
在小程序中使用Echart图表的示例代码
Aug 02 Javascript
Ant Design的Table组件去除
Oct 24 Javascript
浅谈node.js中间件有哪些类型
Apr 29 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
程序员编程十条戒律
2009/07/09 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
js字符编码函数区别分析
2008/06/05 Javascript
js 自定义的联动下拉框
2010/02/07 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
Python+微信接口实现运维报警
2016/08/27 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
python中实现控制小数点位数的方法
2019/01/24 Python
详解Python locals()的陷阱
2019/03/26 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
财务工作者先进事迹材料
2014/01/17 职场文书
信用卡收入证明范本
2015/06/12 职场文书
战友聚会致辞
2015/07/28 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
Redis+AOP+自定义注解实现限流
2022/06/28 Redis