2016-01-08 186 views
0

我目前在AVL-tree上編寫並編寫迭代器方法,以預先遍歷整個樹。如果我處理'stack.empty()'這一行並且不知道爲什麼,我會得到一個NullPointer。 4隻眼睛看起來比2只好;)。預先感謝您事先的幫助。通過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

'''節點start'''未初始化。方法'''iterator()'''不被調用。它不是一個構造函數。你應該使用實例初始化''''''''。 – saka1029

+0

我不需要'節點開始',如果我初始化它,沒有任何變化。你可以給我一個如何調用'iterator()'的示例代碼。預先感謝:) – Maxim

+1

只需用'''{}''''把初始化代碼括起來。換句話說,刪除'''public void iterator()''' – saka1029

回答

2

你大概的意思n.left = NULL

+0

Eclipse沒有處理那麼遠。它只是停在'stack.empty()'。在那裏我得到一個NullPointer :)。但還是謝謝,也許這將是一個即將到來的問題。 – Maxim