我有树的第一个节点。这样的事情:
class TreeNode {
int uniqueValue;
List<TreeNode> children;
}
我想找到打印树的所有节点的最有效内存的方法。树可能很大或非常大。它可以是深或宽。我知道带递归和堆栈的算法。我想要找到的是与图形大小无关地使用固定数量内存的算法。
树不是二元的!
答案 0 :(得分:2)
没有这样的O(1)算法。在最坏的情况下,内存使用总是O(N)。您可以通过添加字段来“欺骗”以支持遍历到图形节点上。这样,如果您能够将图形加载到内存中,则可以遍历它(使用BFS或DFS)。
答案 1 :(得分:0)
如果树恰好存储在类似扁平堆的流中,例如长括号列表,则遍历它只需要足够的内存来记录流中的位置,这需要O(log(N))位。
当然,正如Lior所说,你可以使用O(log(N))位中的堆栈深度优先。
如果您的树引用了宇宙中的每个粒子(比如1e85),从技术上讲,您只需要,让我们看看 - 85次3.3 = 281位=大约35个字节。 我假设你可以处理它。