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 动态将数字金额转化为中文大写金额
May 14 Javascript
window.onload 加载完毕的问题及解决方案(下)
Jul 09 Javascript
JavaScript中yield实用简洁实现方式
Jun 12 Javascript
jquery中get,post和ajax方法的使用小结
Feb 04 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
js实现鼠标悬浮给图片加边框的方法
Jan 30 Javascript
JQuery插入DOM节点的方法
Jun 11 Javascript
Jquery uploadify上传插件使用详解
Jan 13 Javascript
js实现的简单图片浮动效果完整实例
May 10 Javascript
Angularjs中controller的三种写法分享
Sep 21 Javascript
JavaScript原生实现观察者模式的示例
Dec 15 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
Sep 03 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中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
php实现简单爬虫的开发
2016/03/28 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
再谈javascript原型继承
2014/11/10 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
完美解决js传递参数中加号和&amp;号自动改变的方法
2016/10/11 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
JS验证码实现代码
2017/09/14 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
用python实现学生管理系统
2020/07/24 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
外贸学院会计专业应届生求职信
2013/11/14 职场文书
4s客服专员岗位职责
2013/12/01 职场文书
酒吧总经理岗位职责
2013/12/10 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
原材料检验岗位职责
2014/03/15 职场文书
开平碉楼导游词
2015/02/06 职场文书
商场收银员岗位职责
2015/04/07 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers