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 写类方式之二
Jul 05 Javascript
js 幻灯片的实现
Dec 06 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
Jan 15 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
Ajax提交与传统表单提交的区别说明
Feb 07 Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 Javascript
jQuery实现对象转为url参数的方法
Jan 11 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
Jan 24 Javascript
bootstrap vue.js实现tab效果
Feb 07 Javascript
jquery ztree实现右键收藏功能
Nov 20 jQuery
Vue.js中的高级面试题及答案
Jan 13 Javascript
解决vue项目获取dom元素宽高总是不准确问题
Jul 29 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和javascript之间变量的传递实现代码
2012/12/19 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
Angular实现响应式表单
2017/08/04 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
Python读写Excel文件方法介绍
2014/11/22 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
如何通过python画loss曲线的方法
2019/06/26 Python
Form表单及django的form表单的补充
2019/07/25 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
使用python实现CGI环境搭建过程解析
2020/04/28 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
项目经理的岗位职责
2013/11/23 职场文书
仓库理货员岗位职责
2013/12/18 职场文书
数控机床专业自荐信
2014/05/19 职场文书
大学生求职信范文
2014/05/24 职场文书
保护环境标语
2014/06/09 职场文书
经营理念口号
2014/06/21 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python