JavaScript树的深度优先遍历和广度优先遍历算法示例


Posted in Javascript onJuly 30, 2018

本文实例讲述了JavaScript树的深度优先遍历和广度优先遍历算法。分享给大家供大家参考,具体如下:

1、深度优先遍历的递归写法

function deepTraversal(node) {
  var nodes = [];
  if (node != null) {
      nodes.push(node);
      var children = node.children;
      for (var i = 0; i < children.length; i++)
          deepTraversal(children[i]);
  }
  return nodes;
}

2、深度优先遍历的非递归写法

function deepTraversal(node) {
  var nodes = [];
  if (node != null) {
    var stack = [];
    stack.push(node);
    while (stack.length != 0) {
      var item = stack.pop();
      nodes.push(item);
      var children = item.children;
      for (var i = children.length - 1; i >= 0; i--)
        stack.push(children[i]);
    }
  }
  return nodes;
}

3、广度优先遍历的递归写法:

报错:Maximum call stack size exceeded(…)

function wideTraversal(node) {
  var nodes = [];
  var i = 0;
  if (!(node == null)) {
    nodes.push(node);
    wideTraversal(node.nextElementSibling);
    node = nodes[i++];
    wideTraversal(node.firstElementChild);
  }
  return nodes;
}

4、广度优先遍历的非递归写法

function wideTraversal(selectNode) {
  var nodes = [];
  if (selectNode != null) {
    var queue = [];
    queue.unshift(selectNode);
    while (queue.length != 0) {
      var item = queue.shift();
      nodes.push(item);
      var children = item.children;
      for (var i = 0; i < children.length; i++)
        queue.push(children[i]);
    }
  }
  return nodes;
}

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

Javascript 相关文章推荐
javascript不同页面传值的改进版
Sep 30 Javascript
使用JavaScript switch case 另类写法
Mar 14 Javascript
js中匿名函数的N种写法
Sep 08 Javascript
jQuery选择器全面总结
Jan 06 Javascript
jQuery中mouseover事件用法实例
Dec 26 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
JQuery节点元素属性操作方法
Jun 11 Javascript
纯js实现画一棵树的示例
Sep 05 Javascript
vue实现树形菜单效果
Mar 19 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
react写一个select组件的实现代码
Apr 03 Javascript
javascript实现视频弹幕效果(两个版本)
Nov 28 Javascript
JavaScript笛卡尔积超简单实现算法示例
Jul 30 #Javascript
angular-tree-component的使用详解
Jul 30 #Javascript
使用vue-router为每个路由配置各自的title
Jul 30 #Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 #Javascript
在react中使用vuex的示例代码
Jul 30 #Javascript
使用JS判断移动端手机横竖屏状态
Jul 30 #Javascript
详解如何在微信小程序中愉快地使用sass
Jul 30 #Javascript
You might like
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
jQuery中的常用事件总结
2009/12/27 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
angular.fromJson与toJson方法用法示例
2017/05/17 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
刑事辩护授权委托书范本
2014/10/17 职场文书
房产协议书范本
2014/10/18 职场文书
父亲节活动总结
2015/02/12 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
无线电通信名词解释
2022/02/18 无线电