本文实例讲述了 树的深度优先遍历和广度优先遍历算法。分享给大家供大家参考,具体如下:
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;
}
更多关于 相关内容感兴趣的读者可查看本站专题:《 数据结构与算法技巧总结》、《 数学运算用法总结》、《 排序算法总结》、《 遍历算法与技巧总结》、《 查找算法技巧总结》及《 错误与调试技巧总结》
希望本文所述对大家 程序设计有所帮助。
继续阅读与本文标签相同的文章
-
有一台服务器可以做哪些很酷的事情
2026-05-16栏目: 教程
-
挑战未来:下一代企业级应用数据库系统
2026-05-16栏目: 教程
-
代码补全快餐教程(1) - 30行代码见证奇迹
2026-05-16栏目: 教程
-
含光800NPU开发指南(一)【芯片与软件栈系列之----含光十八式】
2026-05-16栏目: 教程
-
为什么 JavaScript 中 0.1+0.2 不等于 0.3 ?
2026-05-16栏目: 教程
