2016-01-08 8 views
0

В настоящее время я пишу на AVL-tree и пишу итератор-метод, чтобы перебирать все дерево в предварительном порядке. И я получаю NullPointer, если обрабатываю строку «stack.empty()» и не знаю, почему. И 4 глаза видят это лучше, чем два;). Заранее благодарю вас за помощь.Итерация через дерево avl

Код:

@Override 
public Iterator<E> iterator() { 

    return new Iterator<E>(){ 
     Node start; 
     Node current; 
     //   int counter; 
     Stack<Node> stack; 
     //   int border = count(root); 

     public void iterator() { 

      stack = new Stack<Node>(); 
      current = start; 
      stack.add(root); 
     } 

     @Override 
     public boolean hasNext() { 
      if(stack.empty()) return false; 
      else return true; 
     } 

     @Override 
     public E next() { 
      if(!hasNext()){ 
       throw new NoSuchElementException(); 
      } 
      Node n = stack.pop(); 
      if(n.left.value != null) stack.push(n.left); 
      if(n.right.value != null) stack.push(n.right); 

      return n.value;    
     } 

    }; 
} 
+0

'' 'Node start''' не инициализирован. Метод '' 'iterator()' '' не вызывается. Это не конструктор. Вы должны использовать инициализатор экземпляра '' '{}' ''. – saka1029

+0

Мне не нужно «Node start», и если я его инициализирую, ничего не изменится. Можете ли вы отправить мне пример кода, как я могу назвать «итератор()». Спасибо заранее :) – Maxim

+1

Просто приложите инициализируемый код '' '{}' ''. Другими словами, удалите '' 'public void iterator()' '' – saka1029

ответ

2

Вы, наверное, имеете в виду n.left = нуль

+0

Eclipse так далеко не обработал. Он просто остановился на «stack.empty()». Там я получаю NullPointer :). Но все равно спасибо, может быть, это была бы предстоящая проблема. – Maxim

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