JavaScript树的深度优先遍历和广度优先遍历算法示例

 更新时间:2018年07月30日 11:27:07   作者:筱葭  
这篇文章主要介绍了JavaScript树的深度优先遍历和广度优先遍历算法,结合实例形式分析了JavaScript树的深度优先遍历、广度优先遍历递归与非递归相关实现技巧,需要的朋友可以参考下

本文实例讲述了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数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

  • js 幻灯片的实现

    js 幻灯片的实现

    今天在群里看到有人要幻灯片的代码,于是我自己也想了想,做个总结。常见的幻灯片切换无非就是轮播和渐变,不管哪种都是用定时器来逐步改变图片或者图片组的某种属性来实现的
    2011-12-12
  • JavaSctit 利用FileReader和滤镜上传图片预览功能

    JavaSctit 利用FileReader和滤镜上传图片预览功能

    FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件内容,使用 File或 Blob对象指定要读取的文件或数据。下面通过本文给大家分享JavaSctit 利用FileReader和滤镜上传图片预览功能,需要的朋友参考下吧
    2017-09-09
  • JavaScript时间对象之常用方法的设置实例

    JavaScript时间对象之常用方法的设置实例

    这篇文章主要为大家介绍了JavaScript时间对象常用方法的设置实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 简单实现js浮动框

    简单实现js浮动框

    这篇文章主要为大家详细介绍了如何简单实现js浮动框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • js实现表单项的全选、反选及删除操作示例

    js实现表单项的全选、反选及删除操作示例

    这篇文章主要介绍了js实现表单项的全选、反选及删除操作,结合实例形式分析了基于dedecms后台使用js实现表单项的全选、反选及删除相关操作技巧,需要的朋友可以参考下
    2020-06-06
  • echarts中图例右置且竖排完整代码

    echarts中图例右置且竖排完整代码

    这篇文章主要给大家介绍了关于echarts中图例右置且竖排的相关资料,Echarts可以帮助我们快速构建柱状图、饼图、条形图,这对于多图形化展示数据来说尤其方便,可帮助我们快速开发,需要的朋友可以参考下
    2023-08-08
  • js实现每日签到功能

    js实现每日签到功能

    这篇文章主要为大家详细介绍了js实现每日签到功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • JavaScript中的全局对象介绍

    JavaScript中的全局对象介绍

    这篇文章主要介绍了JavaScript中的全局对象介绍,对于任何JavaScript程序,当程序开始运行时,JavaScript解释器都会初始化一个全局对象以供程序使用,需要的朋友可以参考下
    2015-01-01
  • JS转换金额大写方法详细例子

    JS转换金额大写方法详细例子

    在处理财务账款类需求时需要将转账金额写成大写的,下面这篇文章主要给大家介绍了关于JS转换金额大写方法的相关资料,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-10-10
  • 微信小程序返回上一级页面的实现代码

    微信小程序返回上一级页面的实现代码

    这篇文章主要介绍了微信小程序返回上一级页面的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论