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 相关文章推荐
基于jquery实现的服务器验证控件的启用和禁用代码
Apr 27 Javascript
举例详解JavaScript中Promise的使用
Jun 24 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
Sep 07 Javascript
JavaScript实现反转字符串的方法详解
Apr 27 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
Aug 28 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
解决在vue项目中webpack打包后字体不生效的问题
Sep 01 Javascript
vue生命周期与钩子函数简单示例
Mar 13 Javascript
详解如何使用nvm管理Node.js多版本
May 06 Javascript
Vue 使用beforeEach实现登录状态检查功能
Oct 31 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
Feb 20 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
Dec 07 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
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
浅析js封装和作用域
2013/07/09 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
秦兵马俑教学反思
2014/02/07 职场文书
推荐信怎么写
2014/05/09 职场文书
找工作求职信
2014/07/07 职场文书
文案策划专业自荐信
2014/07/07 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
大学生村官个人总结
2015/02/15 职场文书
学雷锋活动简报
2015/07/20 职场文书
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers