2016-04-25 7 views
0

Ich versuche eine Funktion zu schreiben, die nach einem Wert auf einem Baum sucht, den ich erstellt habe, ich habe eine rekursive Funktion geschrieben, die gut funktioniert. Jetzt möchte ich meine Laufzeit verbessern, also möchte ich mit der while-Schleife nach dem Wert suchen. Das Problem ist, dass ich NullPointerException bekomme. Ich weiß sicher, dass der Baum in Ordnung ist, denn bevor ich die Suche durchführe, drucke ich alle Werte aus. Also, was ist das Problem mit meinem Code?Binärbaum mit einer While-Schleife suchen

public void SearchByLoop(Node root,final int val){ 

     while(root != null || root.getVal() == val){ 

      if(root.getVal() < val) 

       root = root.getRightChild(); 

      else if(root.getVal() > val) 

       root = root.getLeftChild(); 

     } 

     if(root == null) 

      System.out.println("Couldn't find value " + val); 

     else if(root.getVal() == val) 

       System.out.println("Found value " + val); 

    } 

public class Main { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Tree theTree = new Tree(); 
    Random rand = new Random();//Create random variable. 
    int val = 0; 
    for(int i = 0 ; i < 100; i ++){ 

     val = rand.nextInt(151) + (0); 
     theTree.addNode(val,"a"); 
    } 
    theTree.inOrderTraverseTree(theTree.getRoot()); 
    theTree.SearchByLoop(theTree.getRoot(), 10); 

} 
} 

Nun werden die inOrderTraverse Methode druckt alle der Werte, so weiß ich, dass der Baum in Ordnung ist. Was kann das Problem sein? Vielen Dank!

Antwort

3

Diese Bedingung

while(root != null || root.getVal() == val) 

erhalten Sie eine Nullpointer geben, wenn root null ist.

Sie wollen wahrscheinlich

while(root != null && root.getVal() != val)