【发布时间】:2018-06-22 10:57:11
【问题描述】:
使用递归很容易做 DFS:
function dfs(tree, fn, level) {
fn(tree, level)
tree.children.forEach(function(child){
dfs(child, fn, level + 1)
})
}
然而,我看到的每个example BFS 都使用队列,并且是迭代的而不是递归的。想知道是否有任何方法可以定义递归 BFS 算法。
【问题讨论】:
-
类似于stackoverflow.com/questions/2549541/… ?如果你的图是一棵树,你可以使用迭代深化。如果是通用图,则需要支付内存成本,但可以通过堆栈上的队列使其“递归”。
-
是的,与此类似,但没有明确的答案,除非答案是否定的,否则您不能这样做。 (不知道这是否是他们所说的)。我想看看递归执行它需要什么。
-
您始终可以将循环编写为(尾)递归函数,但不能取消队列。这是 BFS 所固有的。
标签: javascript algorithm tree breadth-first-search tree-traversal