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 相关文章推荐
仅img元素创建后不添加到文档中会执行onload事件的解决方法
Jul 31 Javascript
基于jQuery实现的图片切换焦点图整理
Dec 07 Javascript
JavaScript实现强制重定向至HTTPS页面
Jun 10 Javascript
javaScript中Math()函数注意事项
Jun 18 Javascript
JavaScript实现的背景自动变色代码
Oct 17 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
May 31 Javascript
javascript 动态生成css代码的两种方法
Mar 17 Javascript
Node中使用ES6语法的基础教程
Jan 05 Javascript
js实现上传并压缩图片效果
Jan 10 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
Mar 21 Javascript
通过扫小程序码实现网站登陆功能
Aug 22 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
php防止sql注入代码实例
2013/12/18 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
jQuery的deferred对象使用详解
2011/08/20 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python实现的堆排序算法示例
2018/04/29 Python
浅谈python中get pass用法
2019/03/19 Python
Python字典对象实现原理详解
2019/07/01 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
中专毕业生个人职业生涯规划
2014/02/19 职场文书
授权委托书样本
2014/04/03 职场文书
党员转正介绍人意见
2015/06/03 职场文书
红高粱观后感
2015/06/10 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers