public class Node {
int value;
List<Node> childNodes;
Node(int x) {
value = x;
childNodes = new ArrayList<>();
}
}
这是节点的定义。
public static double averageNodes(Node root) {
int numofnodes = 0;
int sum = 0;
Stack<Node> s = new Stack<Node>();
s.add(root);
while (!s.isEmpty()) {
Node n = s.pop();
numofnodes++;
sum += n.value;
for (Node temp : root.childNodes) {
s.push(temp); // Line 1
}
}
return sum / numofnodes;
}
我使用带有堆栈的深度优先搜索来遍历树。但是,当我在 Eclipse 中单击“运行”时,第 1 行中会显示一条错误消息“Exception in thread "main"java.lang.OutOfMemoryError: Java heap space”。有人知道如何修复代码以避免此错误吗?
最佳答案
您不能总是添加 root
节点的子节点,而是添加 n
节点的子节点:
for (Node temp : n.childNodes) {
s.push(temp); // Line 1
}
您的代码会导致无限循环和无限增长的堆栈,因为您总是一遍又一遍地添加 root
节点的子节点。
你取出一个元素,把所有的子元素放进去,取出来,把它们全部放进去,等等。这只是一个小错误,但它造成的后果却相当严重。
关于java - 树中所有节点的平均值出现 OutOfMemory 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34403545/