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 相关文章推荐
仿猪八戒网左下角的文字滚动效果
Oct 28 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
Mar 13 Javascript
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
简体中文转换繁体中文(实现代码)
Dec 25 Javascript
JavaScript仿商城实现图片广告轮播实例代码
Feb 06 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
Aug 05 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
Mar 24 jQuery
JS简单实现父子窗口传值功能示例【未使用iframe框架】
Sep 20 Javascript
vue登录路由验证的实现
Dec 13 Javascript
浅谈Vue的响应式原理
May 30 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
Sep 25 Javascript
ant design charts 获取后端接口数据展示
May 25 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
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
php使用GeoIP库实例
2014/06/27 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
python支持断点续传的多线程下载示例
2014/01/16 Python
python脚本替换指定行实现步骤
2017/07/11 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
户外宣传策划方案
2014/05/25 职场文书
走群众路线剖析材料
2014/10/09 职场文书
大学生读书笔记范文
2015/07/01 职场文书
毕业欢送会致辞
2015/07/29 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书