是否存在固定内存使用的树遍历算法?

时间:2013-12-07 16:10:47

标签: algorithm tree tree-traversal

我有树的第一个节点。这样的事情:

class TreeNode {
   int uniqueValue;
   List<TreeNode> children;
}

我想找到打印树的所有节点的最有效内存的方法。树可能很大或非常大。它可以是深或宽。我知道带递归和堆栈的算法。我想要找到的是与图形大小无关地使用固定数量内存的算法。

树不是二元的!

2 个答案:

答案 0 :(得分:2)

没有这样的O(1)算法。在最坏的情况下,内存使用总是O(N)。您可以通过添加字段来“欺骗”以支持遍历到图形节点上。这样,如果您能够将图形加载到内存中,则可以遍历它(使用BFS或DFS)。

答案 1 :(得分:0)

如果树恰好存储在类似扁平堆的流中,例如长括号列表,则遍历它只需要足够的内存来记录流中的位置,这需要O(log(N))位。

当然,正如Lior所说,你可以使用O(log(N))位中的堆栈深度优先。

如果您的树引用了宇宙中的每个粒子(比如1e85),从技术上讲,您只需要,让我们看看 - 85次3.3 = 281位=大约35个字节。 我假设你可以处理它。