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 15 Javascript
jquery动态分页效果堪比时光网
Sep 25 Javascript
jQuery版本升级踩坑大全
Jan 12 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
Dec 07 Javascript
js仿小米手机上下滑动效果
Feb 05 Javascript
Vue.Js中的$watch()方法总结
Mar 23 Javascript
微信小程序 后台登录(非微信账号)实例详解
Mar 31 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
Mar 31 Javascript
小程序getLocation需要在app.json中声明permission字段
Apr 04 Javascript
细说Vue组件的服务器端渲染的过程
May 30 Javascript
JavaScript设计模式之策略模式实现原理详解
May 29 Javascript
Antd的table组件表格的序号自增操作
Oct 27 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生成HTML静态页面实例代码
2008/08/31 PHP
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
destoon二次开发入门示例
2014/06/20 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
JQuery live函数
2010/12/24 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
Python模拟用户登录验证
2017/09/11 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
幼儿园数学教学反思
2014/02/02 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
alibaba seata服务端具体实现
2022/02/24 Java/Android