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 相关文章推荐
js对字符的验证方法汇总
Feb 04 Javascript
详解AngularJS中的表格使用
Jun 16 Javascript
javascript简单判断输入内容是否合法的方法
May 11 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 jQuery
前端MVVM框架解析之双向绑定
Jan 24 Javascript
vue 注册组件的使用详解
May 05 Javascript
vue实现简单loading进度条
Jun 06 Javascript
快速解决处理后台返回json数据格式的问题
Aug 07 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
May 12 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
Sep 27 Javascript
关于JavaScript中异步/等待的用法与理解
Nov 18 Javascript
前端框架ECharts dataset对数据可视化的高级管理
Dec 24 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中json_encode中文编码问题分析
2011/09/13 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
checkbox使用示例
2013/08/23 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
详解python的四种内置数据结构
2019/03/19 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
百丽国际旗下购物网站:优购
2017/02/28 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
工程造价与管理专业应届生求职信
2013/11/23 职场文书
应届专科生个人的自我评价
2014/01/05 职场文书
作文评语集锦大全
2014/04/23 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
学校清明节活动总结
2014/07/04 职场文书
幼儿学前班评语
2014/12/29 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL