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 相关文章推荐
JavaScript delete操作符应用实例
Jan 13 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 Javascript
javascript创建和存储cookie示例
Jan 07 Javascript
JS获取当前日期时间并定时刷新示例
Mar 04 Javascript
浅谈javascript 归并方法
Jan 21 Javascript
使用JavaScript 实现的人脸检测
Mar 24 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
Jun 17 Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
Sep 26 Javascript
vue单页面在微信下只能分享落地页的解决方案
Apr 15 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 Javascript
JavaScript面向对象核心知识与概念归纳整理
May 09 Javascript
在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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
获取URL文件名后缀
2013/10/24 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Python如何绘制日历图和热力图
2020/08/07 Python
美国时尚在线:Showpo
2017/09/08 全球购物
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
高中自我鉴定
2013/12/20 职场文书
影视动画专业个人的自我评价
2013/12/31 职场文书
优秀小学生家长评语
2014/01/30 职场文书
学生自我评语大全
2014/04/18 职场文书
2014年公司工作总结
2014/11/22 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
比较node.js和Deno
2021/04/27 Javascript