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 相关文章推荐
textarea的value是html文件源代码,存成html文件的代码
Apr 20 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
Express的路由详解
Dec 10 Javascript
js实现上传图片及时预览
May 07 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
Sep 01 Javascript
jQuery图片轮播功能实例代码
Jan 29 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 Javascript
JavaScript实现无刷新上传预览图片功能
Aug 02 Javascript
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
May 04 Javascript
Vue Echarts实现可视化世界地图代码实例
May 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
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
PHP基础学习小结
2011/04/17 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
Laravel find in set排序实例
2019/10/09 PHP
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
angular.fromJson与toJson方法用法示例
2017/05/17 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
Python 函数基础知识汇总
2018/03/09 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
python实现处理mysql结果输出方式
2020/04/09 Python
python实现交并比IOU教程
2020/04/16 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
一些Solaris面试题
2013/03/22 面试题
介绍一下Make? 为什么使用make
2013/12/08 面试题
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
创意活动策划书
2014/01/15 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
校园广播稿精选
2014/10/01 职场文书