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 相关文章推荐
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
Oct 11 Javascript
jquery getScript动态加载JS方法改进详解
Nov 15 Javascript
jQuery模拟新浪微博首页滚动效果的方法
Mar 11 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
Feb 27 Javascript
理解javascript模块化
Mar 28 Javascript
原生JavaScript编写canvas版的连连看游戏
May 29 Javascript
RGB和YUV 多媒体编程基础详细介绍
Nov 04 Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 Javascript
微信小程序实现录音时的麦克风动画效果实例
May 18 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
jQuery实现雪花飘落效果
Aug 02 jQuery
Vue项目配置跨域访问和代理proxy设置方式
Sep 08 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
php debug 安装技巧
2011/04/30 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
Laravel find in set排序实例
2019/10/09 PHP
jQuery动画animate方法使用介绍
2013/05/06 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
js打造数组转json函数
2015/01/14 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
python 实现数字字符串左侧补零的方法
2018/12/04 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
元旦文艺汇演主持词
2014/03/26 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
2015年工程部工作总结
2015/04/30 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
MYSQL 表的全面总结
2021/11/11 MySQL
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android