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 相关文章推荐
input 输入框内的输入事件详细分析
Mar 17 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
Jun 29 Javascript
jQuery学习笔记之Helloworld
Dec 22 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
Jun 08 Javascript
js函数定时器实现定时读取系统实时连接数
Apr 30 Javascript
jquery实现动态改变div宽度和高度
May 08 Javascript
Javascript中的方法和匿名方法实例详解
Jun 13 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
Mar 28 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
Aug 31 Javascript
javascript中的闭包概念与用法实践分析
Jul 26 Javascript
React如何使用axios请求数据并把数据渲染到组件
Aug 05 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 Stream_*系列函数
2010/08/01 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
django中forms组件的使用与注意
2019/07/08 Python
Python logging模块handlers用法详解
2020/08/14 Python
python 实现性别识别
2020/11/21 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
益模软件Java笔试题
2012/03/27 面试题
总经理办公室主任岗位职责
2013/11/12 职场文书
竟聘演讲稿范文
2013/12/31 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
供应链金融服务方案
2014/05/25 职场文书
新闻学专业求职信
2014/07/28 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
干部外出学习心得体会
2016/01/18 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android