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实现自定义对话框的代码
Jun 15 Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
Jul 10 Javascript
jquery默认校验规则整理
Mar 24 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
JavaScript获取元素尺寸和大小操作总结
Feb 27 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
May 19 Javascript
jquery实现的Banner广告收缩效果代码
Sep 02 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 Javascript
es6函数之尾递归用法实例分析
Apr 25 Javascript
jquery轮播图插件使用方法详解
Jul 31 jQuery
vue中如何自定义右键菜单详解
Dec 08 Vue.js
react项目从新建到部署的实现示例
Feb 19 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/08/02 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
英国在线药房:Express Chemist
2019/03/28 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
法学院方阵解说词
2014/01/29 职场文书
文明村镇申报材料
2014/05/06 职场文书
机械专业求职信
2014/05/25 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
PyTorch的Debug指南
2021/05/07 Python
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android