JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例


Posted in Javascript onFebruary 08, 2018

本文实例讲述了JavaScript实现多叉树的递归遍历和非递归遍历算法操作。分享给大家供大家参考,具体如下:

演示之前的准备工作

演示项目的文件结构:

index.html
jsonData.js
recurrenceTree.js
noRecurrenceTree.js

解释一下各个文件:

index.html 是用来演示的 HTML 文件。
jsonData.js 里面存储着多叉树的JSON数据。
recurrenceTree.js 递归算法遍历树。
noRecurrenceTree.js 非递归算法遍历树。

jsonData.js

/**
 * 用于演示的 JSON 树形数据结构
 */
var root = {
  name:'D盘',
  children:[
    {
      name:'学习',
      children:[
        {
          name:'电子书',
          children:[
            {
              name:'文学',
              children:[
                {
                  name:'茶馆'
                },
                {
                 name:'红与黑'
                }
              ]
            }
          ]
        }
      ]
    },
    {
      name:'电影',
      children:[
        {
          name:'美国电影'
        },
        {
          name:'日本电影'
        }
      ]
    }
  ]
}

index.html

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="renderer" content="webkit"/>
  <meta http-equiv="x-ua-compatible" content="ie=edge, chrome=1">
  <meta http-equiv="Cache-Control" content="max-age: 31536000">
  <title>3water.com js多叉树遍历</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <meta name="wap-font-scale" content="no">
  <meta name="author" content="">
  <meta name="keywords" content="">
  <meta name="description" content="">
  <script type="text/javascript" src="jsonData.js"></script>
 </head>
 <body>
  递归遍历:<span id="app"></span>
  <script type="text/javascript" src="recurrenceTree.js"></script>
  <hr>
  非递归遍历:<span id="app2"></span>
  <script type="text/javascript" src="noRecurrenceTree.js"></script>
 </body>
</html>

递归遍历

recurrenceTree.js

// 遍历单个节点
function traverseNode(node){
  var divObj = document.getElementById("app");
  divObj.innerHTML = divObj.innerHTML + " " + node.name;
}
// 递归遍历树
// 作者:张超
function traverseTree(node){
  if (!node) {
    return;
  }
  traverseNode(node);
  if (node.children && node.children.length > 0) {
    var i = 0;
    for (i = 0; i < node.children.length; i++) {
      this.traverseTree(node.children[i]);
    }
  }
}
traverseTree(root);

非递归遍历

noRecurrenceTree.js

// 遍历单个节点
function traverseNode2(node){
  var divObj2 = document.getElementById("app2");
  divObj2.innerHTML = divObj2.innerHTML + " " + node.name;
}
// 非递归遍历树
// 作者:张超
function traverseTree2(node){
  if (!node) {
    return;
  }
  var stack = [];
  stack.push(node);
  var tmpNode;
  while (stack.length > 0) {
    tmpNode = stack.pop();
    traverseNode2(tmpNode);
    if (tmpNode.children && tmpNode.children.length > 0) {
      var i = tmpNode.children.length - 1;
      for (i = tmpNode.children.length - 1; i >= 0; i--) {
        stack.push(tmpNode.children[i]);
      }
    }
  }
}
traverseTree2(root);

本机测试效果:

JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例

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

Javascript 相关文章推荐
Jquery之Ajax运用 学习运用篇
Sep 26 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
Dec 04 Javascript
jQuery Ajax 加载数据时异步显示加载动画
Aug 01 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 Javascript
JS对大量数据进行多重过滤的方法
Nov 04 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
Feb 19 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
Apr 16 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
vue项目首屏加载时间优化实战
Apr 23 Javascript
利用js canvas实现五子棋游戏
Oct 11 Javascript
Vue的生命周期一起来看看
Feb 24 Vue.js
在vue项目中使用element-ui的Upload上传组件的示例
Feb 08 #Javascript
vue中实现methods一个方法调用另外一个方法
Feb 08 #Javascript
使用vux实现上拉刷新功能遇到的坑
Feb 08 #Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 #jQuery
jQuery 防止相同的事件快速重复触发方法
Feb 08 #jQuery
AnglarJs中的上拉加载实现代码
Feb 08 #Javascript
利用vue.js实现被选中状态的改变方法
Feb 08 #Javascript
You might like
Phpbean路由转发的php代码
2008/01/10 PHP
第六章 php目录与文件操作
2011/12/30 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
php中引用符号(&amp;)的使用详解
2013/11/13 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Python接口自动化测试的实现
2020/08/28 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
打架检讨书100字
2014/01/08 职场文书
认错检讨书
2014/10/02 职场文书
单位推荐信范文
2015/03/27 职场文书
大学生社会实践感想
2015/08/11 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python