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.GetAllChild(element,deep,condition)使用介绍
Sep 21 Javascript
JS教程:window.location使用方法的区别介绍
Oct 04 Javascript
jQuery简单实现两级下拉菜单效果代码
Sep 15 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
May 07 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
Nov 26 Javascript
微信小程序 Button 组件详解及简单实例
Jan 10 Javascript
详解使用mpvue开发github小程序总结
Jul 25 Javascript
JavaScript原型链与继承操作实例总结
Aug 24 Javascript
详解Axios 如何取消已发送的请求
Oct 20 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
Nov 06 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
关于PHP5 Session生命周期介绍
2010/03/02 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
JS实现留言板功能
2017/06/17 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
如何运行带参数的python脚本
2019/11/15 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
护理专业应届毕业生推荐信
2013/11/15 职场文书
生物学学生自我评价
2014/01/17 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
白血病捐款倡议书
2014/05/14 职场文书
班级课外活动总结
2014/07/09 职场文书
教师暑期培训感言
2014/08/15 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
创建文明城市倡议书
2015/04/28 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
MySQL查询日期时间
2022/05/15 MySQL