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