2016-04-25 11 views
0

私が構築したツリーの値を検索する関数を記述しようとしていますが、うまく動作する再帰関数を記述しました。今は実行時間を改善したいので、値を探すためにwhileループを使いたいと思います。問題は私がNullPointerExceptionを得ていることです。私は検索を実行する前にすべての値を印刷するので、ツリーが大丈夫であることを確かに知っています。だから私のコードの問題は何ですか?今Whileループでバイナリツリーを検索する

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

} 
} 

inOrderTraverse方法は、すべての値を出力しますので、私は木がOKであることを知っています。何が問題なの?ありがとうございました! rootがnullのとき

答えて

3

この条件

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

はあなたにNullPointerExceptionが得られます。

おそらく

while(root != null && root.getVal() != val) 
をしたいです
関連する問題