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 读取页面load get post ajax 四种方式代码写法
Apr 02 Javascript
前后台交互过程中json格式如何解析以及如何生成
Dec 26 Javascript
javascript回车完美实现tab切换功能
Mar 13 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
Nov 17 Javascript
Angular-Touch库用法示例
Dec 22 Javascript
微信小程序中显示html格式内容的方法
Apr 25 Javascript
解决iView中时间控件选择的时间总是少一天的问题
Mar 15 Javascript
微信小程序实现打卡日历功能
Sep 21 Javascript
javascript实现手动点赞效果
Apr 09 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
Jun 18 Javascript
electron-vue开发环境内存泄漏问题汇总
Oct 10 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
Sep 01 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
如何使用脚本模仿登陆过程
2006/11/22 PHP
php+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
web前端开发也需要日志
2010/12/09 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
Python实现学生成绩管理系统
2020/04/05 Python
python设置值及NaN值处理方法
2018/07/03 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
python五子棋游戏的设计与实现
2019/06/18 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
党支部书记先进事迹
2014/01/17 职场文书
预备党员承诺书
2014/03/25 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
生日庆典策划方案
2014/06/02 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
openstack中的rpc远程调用的方法
2021/07/09 Python
pycharm无法安装cv2模块问题
2022/05/20 Python