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 浮动广告实现代码
Dec 25 Javascript
javascript 面向对象的JavaScript类
May 04 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
Jan 06 Javascript
不得不分享的JavaScript常用方法函数集(下)
Dec 25 Javascript
从0开始学Vue
Oct 27 Javascript
怎样判断jQuery当前元素是隐藏还是显示
Nov 23 Javascript
微信小程序 解决swiper不显示图片的方法
Jan 04 Javascript
从零开始用electron手撸一个截屏工具的示例代码
Oct 10 Javascript
vue插件draggable实现拖拽移动图片顺序
Dec 01 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
深入理解Vue keep-alive及实践总结
Aug 21 Javascript
node使用request请求的方法
Dec 20 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中的unset究竟会不会释放内存
2013/07/18 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
PHP session 会话处理函数
2016/06/06 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Python实现数据库编程方法详解
2015/06/09 Python
Python subprocess模块详细解读
2018/01/29 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
校园公益广告语
2014/03/13 职场文书
python实现层次聚类的方法
2021/11/01 Python
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android