javascript数据结构之二叉搜索树实现方法


Posted in Javascript onNovember 25, 2015

本文实例讲述了javascript二叉搜索树实现方法。分享给大家供大家参考,具体如下:

二叉搜索树顾名思义,树上每个节点最多只有二根分叉;而且左分叉节点的值 < 右分叉节点的值

特点插入节点、找最大/最小节点、节点值排序 非常方便

二叉搜索树-javascript实现

<script type="text/javascript">
// <![CDATA[
 //打印输出
 function println(msg) {
  document.write(msg + " ");
 }
 //节点类
 var Node = function (v) {
  this.data = v; //节点值
  this.left = null; //左节点
  this.right = null; //右节点
 }
 //二叉搜索树类
 var BinarySearchTree = function () {
  this.root = null; //初始化时,根节点为空
  //插入节点
  //参数:v 为节点的值
  this.insert = function (v) {
   var newNode = new Node(v);
   if (this.root == null) {
    //树为空时,新节点,直接成为根节点
    this.root = newNode;
    return;
   }
   var currentNode = this.root; //工作“指针”节点(从根开始向下找)
   var parentNode = null;
   while (true) {
    parentNode = currentNode;
    if (v < currentNode.data) {
     //当前节点的值 > 目标节点的值     
     //应该向左插,工作节点移到左节点
     currentNode = currentNode.left;
     if (currentNode == null) {
      //没有左节点,则新节点,直接成为左节点
      parentNode.left = newNode;
      return; //退出循环
     }
    }
    else {
     //否则向右插,工作节点移到右节点
     currentNode = currentNode.right;
     if (currentNode == null) {
      parentNode.right = newNode;
      return;
     }
    }
   }
  }
  //查找最小节点
  this.min = function () {
   var p = this.root; //工作节点 
   while (p != null && p.left != null) {
    p = p.left;
   }
   return p;
  }
  //查找最大节点
  this.max = function () {
   var p = this.root; //工作节点 
   while (p != null && p.right != null) {
    p = p.right;
   }
   return p;
  }
  //中序遍历
  this.inOrder = function (rootNode) {
   if (rootNode != null) {
    this.inOrder(rootNode.left); //先左节点
    println(rootNode.data); //再根节点
    this.inOrder(rootNode.right); //再右节点
   }
  }
  //先序遍历
  this.preOrder = function (rootNode) {
   if (rootNode != null) {
    println(rootNode.data); //先根
    this.preOrder(rootNode.left); //再左节点
    this.preOrder(rootNode.right); //再右节点
   }
  }
  //后序遍历
  this.postOrder = function (rootNode) {
   if (rootNode != null) {
    this.postOrder(rootNode.left); //先左节点
    this.postOrder(rootNode.right); //再右节点
    println(rootNode.data); //再根节点
   }
  }
 }
 //以下是测试
 var bTree = new BinarySearchTree();
 //《沙特.算法设计技巧与分析》书上图3.9 左侧的树
 bTree.insert(6);
 bTree.insert(3);
 bTree.insert(8);
 bTree.insert(1);
 bTree.insert(4);
 bTree.insert(9);
 println('中序遍历:')
 bTree.inOrder(bTree.root);
 println("<br/>");
 println("先序遍历:");
 bTree.preOrder(bTree.root);
 println("<br/>");
 println("后序遍历:");
 bTree.postOrder(bTree.root);
 println("<br/>");
 var minNode = bTree.min();
 println("最小节点:" + (minNode == null ? "不存在" : minNode.data));
 println("<br/>");
 var maxNode = bTree.max();
 println("最大节点:" + (maxNode == null ? "不存在" : maxNode.data));
// ]]>
</script>
<!--中序遍历: 1 3 4 6 8 9 <br> 先序遍历: 6 3 1 4 8 9 <br> 后序遍历: 1 4 3 9 8 6 <br> 最小节点:1 <br> 最大节点:9-->

输出结果:

中序遍历: 1 3 4 6 8 9 
先序遍历: 6 3 1 4 8 9 
后序遍历: 1 4 3 9 8 6 
最小节点:1 
最大节点:9

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js判断上传文件类型判断FileUpload文件类型代码
May 20 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
Javascript实现获取窗口的大小和位置代码分享
Dec 04 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
Jan 02 Javascript
jquery实现可自动判断位置的弹出层效果代码
Oct 12 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
Oct 28 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
Sep 06 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
Feb 08 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
如何在js代码中消灭for循环实例详解
Jul 29 Javascript
js实现表单项的全选、反选及删除操作示例
Jun 05 Javascript
javascript常用经典算法实例详解
Nov 25 #Javascript
javascript实现很浪漫的气泡冒出特效
Sep 05 #Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 #Javascript
JavaScript编写简单的计算器
Nov 25 #Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
Nov 25 #Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
Nov 25 #Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
Nov 25 #Javascript
You might like
在JavaScript中调用php程序
2009/03/09 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
php多文件上传实现代码
2014/02/20 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
Python中变量交换的例子
2014/08/25 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
python实现DES加密解密方法实例详解
2015/06/30 Python
Python 的描述符 descriptor详解
2016/02/27 Python
python实现12306火车票查询器
2017/04/20 Python
python matplotlib画图实例代码分享
2017/12/27 Python
python正则中最短匹配实现代码
2018/01/16 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
优秀广告词大全
2014/03/19 职场文书
毕业生欢送会主持词
2014/03/31 职场文书
婚前协议书
2014/04/15 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript