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数据表格插件
Jul 17 Javascript
基于jquery的loading 加载提示效果实现代码
Sep 01 Javascript
javascript制作幻灯片(360度全景图片)
Jul 28 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
Dec 17 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
Mongoose实现虚拟字段查询的方法详解
Aug 15 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
Oct 12 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
Jan 21 Javascript
解决Layui 表格自适应高度的问题
Nov 15 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
Feb 11 Javascript
微信小程序实现页面左右滑动
Nov 16 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代码
2010/08/08 PHP
php实现的短网址算法分享
2014/06/20 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
js一组验证函数
2008/12/20 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python图像灰度变换及图像数组操作
2016/01/27 Python
分析Python读取文件时的路径问题
2018/02/11 Python
python游戏地图最短路径求解
2019/01/16 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
django框架创建应用操作示例
2019/09/26 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
大学毕业通用个人的求职信
2013/12/08 职场文书
会计实习生自我鉴定
2013/12/12 职场文书
中药专业自荐信范文
2014/03/18 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
初中英语演讲稿
2014/04/29 职场文书
班组建设经验交流材料
2014/05/12 职场文书
励志演讲稿500字
2014/08/21 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL