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 相关文章推荐
一个报数游戏js版(约瑟夫环问题)
Aug 05 Javascript
深入理解Javascript动态方法调用与参数修改的问题
Dec 10 Javascript
js对字符的验证方法汇总
Feb 04 Javascript
jQuery中(function($){})(jQuery)详解
Jul 15 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
Dec 26 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
Jun 10 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
Jun 28 Javascript
Vue render函数实战之实现tabs选项卡组件
Apr 22 Javascript
vue+egg+jwt实现登录验证的示例代码
May 18 Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 31 Javascript
js表达式与运算符简单操作示例
Feb 15 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
javascript fullscreen全屏实现代码
2009/04/09 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
jQuery oLoader实现的加载图片和页面效果
2015/03/14 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
Python argv用法详解
2016/01/08 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
2019/07/22 Python
python自动识别文本编码格式代码
2019/12/26 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
Django models文件模型变更错误解决
2020/05/11 Python
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
公司司机岗位职责范本
2014/03/03 职场文书
二人合伙经营协议书
2014/09/13 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
gateway网关接口请求的校验方式
2021/07/15 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers