java - 树中所有节点的平均值出现 OutOfMemory 错误

标签 java tree out-of-memory binary-tree

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/

相关文章:

java - 如何在运行时解决 "java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver"?

windows - 如何解决 Matlab 中一个小变量的内存不足问题?

scala - 无法设置 `sbt start`的内存设置

java - 不可序列化异常 - 组布局

java - 如何将日期字符串转换为日期

java - 如果 id 不存在,http put 请求应该返回什么?

data-structures - 为什么广度优先搜索比深度优先使用更多的内存?

javascript - 替换树结构中的根

mysql - 在嵌套集合模型 Java/MySQL 中复制一个子树

database - Groovy sql 数据集导致 java.lang.OutOfMemory