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中offset()和position()的区别分析
Feb 05 Javascript
基于jQuery实现自动轮播旋转木马特效
Nov 02 Javascript
canvas学习之API整理笔记(二)
Dec 29 Javascript
vue实现ToDoList简单实例
Feb 07 Javascript
JS实现微信里判断页面是否被分享成功的方法
Jun 06 Javascript
webpack开发跨域问题解决办法
Aug 03 Javascript
JS运动改变单物体透明度的方法分析
Jan 23 Javascript
JS实现根据指定值删除数组中的元素操作示例
Aug 02 Javascript
js canvas实现写字动画效果
Nov 30 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
Jul 22 Javascript
vant自定义二级菜单操作
Nov 02 Javascript
Vue 列表页带参数进详情页的操作(router-link)
Nov 13 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
PHP chop()函数讲解
2019/02/11 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
Python编程之Re模块下的函数介绍
2017/10/28 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
大学生就业推荐信范文
2013/11/29 职场文书
生产部统计员岗位职责
2014/01/05 职场文书
党员十八大心得体会
2014/09/12 职场文书
刘公岛导游词
2015/02/05 职场文书
大学生党员个人总结
2015/02/13 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
校园开放日新闻稿
2015/07/17 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
php修改word的实例方法
2021/11/17 PHP