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 表单验证插件formValidation实现个性化错误提示
Jun 23 Javascript
Chosen 基于jquery的选择框插件使用方法
May 30 Javascript
JQueryEasyUI datagrid框架的进阶使用
Apr 08 Javascript
javascript数组克隆简单实现方法
Dec 16 Javascript
JS区分浏览器页面是刷新还是关闭
Apr 17 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
Jun 12 Javascript
JS实现保留n位小数的四舍五入问题示例
Aug 03 Javascript
浅析Jquery操作select
Dec 13 Javascript
jQuery表单设置值的方法
Jun 30 jQuery
Angular4学习教程之HTML属性绑定的方法
Jan 04 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
Jun 19 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
Aug 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 empty() 检查一个变量是否为空
2011/11/10 PHP
php curl常用的5个经典例子
2017/01/20 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
学习ExtJS border布局
2009/10/08 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
Vuex的actions属性的具体使用
2019/04/14 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
解析python实现Lasso回归
2019/09/11 Python
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
生物制药毕业生自荐信
2013/10/16 职场文书
咨询公司各岗位职责
2013/12/02 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
女方婚礼新郎答谢词
2014/01/11 职场文书
三万活动总结
2014/04/28 职场文书
汽修专业自荐信
2014/07/07 职场文书
离婚协议书范本样本
2014/08/19 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
写给导师的自荐信
2015/03/06 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
师范生教育见习总结
2015/06/23 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书