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函数
Apr 09 Javascript
Javascript中产生固定结果的函数优化技巧
Jan 16 Javascript
javascript break指定标签打破多层循环示例
Jan 20 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
Aug 21 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
javascript中undefined与null的区别
Aug 16 Javascript
jQuery中$.each()函数的用法引申实例
May 12 Javascript
js拖拽功能实现代码解析
Nov 28 Javascript
基于jQuery实现的设置文本区域的光标位置
Jun 15 jQuery
koa-router路由参数和前端路由的结合详解
May 19 Javascript
vue 实现setInterval 创建和销毁实例
Jul 21 Javascript
jQuery带控制按钮轮播图插件
Jul 31 jQuery
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
长波有什么东西
2021/03/01 无线电
PHP新手上路(十三)
2006/10/09 PHP
php微信支付之APP支付方法
2015/03/04 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
python实现远程控制电脑
2019/05/23 Python
Python占用的内存优化教程
2019/07/28 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
常见的软件开发流程有哪些
2015/11/14 面试题
水毁工程实施方案
2014/04/01 职场文书
校本教研活动总结
2014/07/01 职场文书
租房协议书
2014/09/12 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL