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/jQuery 表单美化插件小结
Feb 14 Javascript
js判断两个日期是否相等的方法
Sep 10 Javascript
jQuery下拉友情链接美化效果代码分享
Aug 26 Javascript
基于BootStrap的图片轮播效果展示实例代码
May 23 Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 Javascript
Web前端框架Angular4.0.0 正式版发布
Mar 28 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 Javascript
vue项目中的webpack-dev-sever配置方法
Dec 14 Javascript
js实现多个倒计时并行 js拼团倒计时
Feb 25 Javascript
前端面试知识点目录一览
Apr 15 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
May 14 Javascript
js实现图片推拉门效果代码实例
May 18 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/03/21 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
jquery 双色表格实现代码
2009/12/08 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
Python中的多重装饰器
2015/04/11 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
大学毕业感言50字
2014/02/07 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
初中作文评语大全
2014/04/23 职场文书
安全技术说明书
2014/05/09 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
小学教育见习总结
2015/06/23 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书