Java 树中所有节点的平均值中的OutOfMemory错误 公共类节点{ int值; 列出子节点; 节点(int x){ 值=x; childNodes=新的ArrayList(); } }
这是节点的定义Java 树中所有节点的平均值中的OutOfMemory错误 公共类节点{ int值; 列出子节点; 节点(int x){ 值=x; childNodes=新的ArrayList(); } },java,tree,out-of-memory,binary-tree,Java,Tree,Out Of Memory,Binary Tree,这是节点的定义 public class Node { int value; List<Node> childNodes; Node(int x) { value = x; childNodes = new ArrayList<>(); } } 公共静态双平均节点(节点根){ int numofnodes=0; 整数和=0; 堆栈s=新堆栈(); s、 添加(根); 而(!s.isEmpty()){ 节点n=s.pop();
public class Node {
int value;
List<Node> childNodes;
Node(int x) {
value = x;
childNodes = new ArrayList<>();
}
}
公共静态双平均节点(节点根){
int numofnodes=0;
整数和=0;
堆栈s=新堆栈();
s、 添加(根);
而(!s.isEmpty()){
节点n=s.pop();
numofnodes++;
总和+=n.值;
用于(节点温度:root.childNodes){
s、 推送(温度);//第1行
}
}
返回和/数量节点;
}
我使用带有堆栈的深度优先搜索遍历树。但是,当我在eclipse中单击run时,第1行显示了一条错误消息“Exception in thread”main“java.lang.OutOfMemoryError:java堆空间”。有人知道如何修复代码以避免此错误吗?您不能总是添加
根节点的子节点,而是添加n
节点的子节点:
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;
}
由于总是一次又一次地添加根节点
的子节点,因此编码会导致无限循环和无限增长的堆栈
取出一个元素,放入所有子元素,取出,放入所有子元素,等等。这只是一个很小的错误,但其原因却相当严重。但我可以构建一个非常简单的树结构,主要只有9个节点,这就是我测试它的方式。
for (Node temp : n.childNodes) {
s.push(temp); // Line 1
}