JavaScript树的深度优先遍历和广度优先遍历算法示例
程序员文章站
2022-06-25 08:38:11
本文实例讲述了javascript树的深度优先遍历和广度优先遍历算法。分享给大家供大家参考,具体如下:
1、深度优先遍历的递归写法
function deept...
本文实例讲述了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程序设计有所帮助。