2016-04-25 4 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 метод печатает все из значений, так что я знаю, что дерево хорошо. В чем проблема? Спасибо!

ответ

3

Это условие

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

даст вам NullPointerException когда root равна нулю.

Вы, вероятно, хотите

while(root != null && root.getVal() != val) 
Смежные вопросы