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 相关文章推荐
jQuery选择器中含有空格的使用示例及注意事项
Aug 25 Javascript
基于JQuery制作可编辑的表格特效
Dec 23 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
Mar 02 Javascript
Node.js事件驱动
Jun 18 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
May 30 Javascript
vue实现可增删查改的成绩单
Oct 27 Javascript
jquery网页加载进度条的实现
Jun 01 jQuery
three.js中文文档学习之如何本地运行详解
Nov 20 Javascript
Vue表单控件绑定图文详解
Feb 11 Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 Javascript
JS实现烟花爆炸效果
Mar 10 Javascript
Vue使用screenfull实现全屏效果
Sep 17 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
详细探究Python中的字典容器
2015/04/14 Python
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
关于Python的一些学习总结
2018/05/25 Python
python中对数据进行各种排序的方法
2019/07/02 Python
python 图片去噪的方法示例
2019/07/09 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
解决python运行启动报错问题
2020/06/01 Python
python生成word合同的实例方法
2021/01/12 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
《生命的药方》教学反思
2014/04/08 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS