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的函数重名看其初始化方式
Mar 08 Javascript
工作需要写的一个js拖拽组件
Jul 28 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
Aug 12 Javascript
JavaScript实现的字符串replaceAll函数代码分享
Apr 02 Javascript
jquery实现横向图片轮播特效代码分享
Nov 19 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
Oct 24 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
May 17 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
详解Vue中CSS样式穿透问题
Sep 12 Javascript
layui使用label标签的方法
Sep 14 Javascript
JS实现简单贪吃蛇小游戏
Oct 28 Javascript
vue如何清除浏览器历史栈
May 25 Vue.js
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 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
由document.body和document.documentElement想到的
2009/04/13 Javascript
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
详解javascript void(0)
2020/07/13 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
pymssql ntext字段调用问题解决方法
2008/12/17 Python
python支持断点续传的多线程下载示例
2014/01/16 Python
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
python实现抖音点赞功能
2019/04/07 Python
python多线程http压力测试脚本
2019/06/25 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
如何基于Python实现自动扫雷
2020/01/06 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
简单了解Django项目应用创建过程
2020/07/06 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
就业自荐书
2013/12/05 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
医学求职信
2014/05/28 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
博士论文答辩开场白
2015/06/01 职场文书
初中毕业生感言
2015/07/31 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
简单了解 MySQL 中相关的锁
2021/05/25 MySQL