JavaScript树的深度优先遍历和广度优先遍历算法示例
2018-07-30 11:27
645 查看
本文实例讲述了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程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- 浅谈JavaScript中树的深度优先遍历和广度优先遍历
- Java实现二叉树的深度优先遍历和广度优先遍历算法示例
- JavaScript中合并数组的N种方法
- JavaScript_Homework2
- (转贴)↑→40种网页常用小技巧(javascript)←↓------[
- (转载)JavaScript中匿名函数,函数直接量和闭包
- javascript 常用正则表达式
- javascript深入理解js闭包
- JavaScript--DOM编程
- JavaScript基础
- HTML加入JavaScript
- JavaScript join() 方法
- JavaScript中yield实用简洁实现方式
- 在JavaScript中获取请求的URL参数
- JavaScript toFixed() 方法
- 浅谈JavaScript 函数作用域当中的“提升”现象
- JavaScript 作用域和作用域链 解析
- javascript获取地址栏参数(源于网络)
- JavaScript打开新窗口
- javascript 里面嵌套方法