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 相关文章推荐
JavaScript setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
一个jquery实现的不错的多行文字图片滚动效果
Sep 28 Javascript
Javascript中的默认参数详解
Oct 22 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
深入分析Javascript事件代理
Jan 30 Javascript
关于js二维数组和多维数组的定义声明(详解)
Oct 02 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
May 21 Javascript
jQuery实现动态添加节点与遍历节点功能示例
Nov 09 jQuery
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
Sep 10 jQuery
Vue 根据条件判断van-tab的显示方式
Aug 03 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
Dec 10 Javascript
关于vue-router-link选择样式设置
Apr 30 Vue.js
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
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
用jscript实现新建word文档
2007/06/15 Javascript
DOM下的节点属性和操作小结
2009/05/14 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
Python简单连接MongoDB数据库的方法
2016/03/15 Python
pandas通过索引进行排序的示例
2018/11/16 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
python实现简单五子棋游戏
2019/06/18 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
Python-split()函数实例用法讲解
2020/12/18 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
ASP.NET中的身份验证有那些
2012/07/13 面试题
法制宣传日活动总结
2014/04/29 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书