2015-12-21 3 views
1
public class Node { 

    int value; 
    List<Node> childNodes; 

    Node(int x) { 
     value = x; 
     childNodes = new ArrayList<>(); 
    } 
} 

Это определение узла.Ошибка OutOfMemory в среднем значении всех узлов в дереве

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; 
    } 

Я использую поиск глубины с помощью стека, чтобы обходить дерево. Однако, когда я нажимаю run in eclipse, сообщение об ошибке показывает «Исключение в потоке» main «java.lang.OutOfMemoryError: Java heap space» в строке 1. Кто-нибудь знает, чтобы исправить код, чтобы избежать этой ошибки?

+0

Но я могу построить очень простую древовидную структуру в основном только с 9 узлами, и именно так я ее тестирую. – sevenxuguang

ответ

1

Вы не должны всегда добавлять дочерние root узла, но те, на n Node:

for (Node temp : n.childNodes) { 
    s.push(temp); // Line 1 
} 

Вы код вызывает бесконечный цикл и бесконечно растущий стек, так как вы всегда добавить дочерние root узла снова и снова.

Вы берете один элемент, вставляете всех детей, вынимаете, вставляете их все и т. Д. Просто небольшая ошибка, но довольно серьезная в том, что она вызывает.

+0

О! Благодаря! @ luk2302 – sevenxuguang

Смежные вопросы