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 相关文章推荐
QQ空间顶部折页撕开效果示例代码
Jun 15 Javascript
常用的JavaScript WEB操作方法分享
Feb 28 Javascript
基于JavaScript代码实现随机漂浮图片广告
Jan 05 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
Vue.js表单控件实践
Oct 27 Javascript
vue iview多张图片大图预览、缩放翻转
Jul 13 Javascript
JavaScript实现单图片上传并预览功能
Sep 30 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
Jan 16 Javascript
JS数组方法shift()、unshift()用法实例分析
Jan 18 Javascript
vue实现前端分页完整代码
Jun 17 Javascript
javascript实现贪吃蛇小练习
Jul 05 Javascript
Element DateTimePicker日期时间选择器的使用示例
Jul 27 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
php4的session功能评述(一)
2006/10/09 PHP
PHP新手上路(三)
2006/10/09 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
javascript打印输出json实例
2013/11/11 Javascript
jquery移动节点实例
2015/01/14 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
Python实现的ini文件操作类分享
2014/11/20 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
django配置app中的静态文件步骤
2020/03/27 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
班主任寄语大全
2014/04/04 职场文书
中学生励志演讲稿
2014/04/26 职场文书
求职信模板
2014/05/23 职场文书
管理工程专业求职信
2014/08/10 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
刑事和解协议书范本
2014/11/19 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
浅谈Python协程asyncio
2021/06/20 Python