使用While循环搜索二叉树

时间:2016-04-25 13:00:13

标签: java binary-tree binary-search-tree

我正在尝试编写一个函数来搜索我构建的树上的值,我编写了一个可以正常工作的递归函数。现在我想改善我的运行时间,所以我想使用while循环来查找值。问题是我得到了NullPointerException。我确定树是可以的,因为在我执行搜索之前,我打印了所有的值。那么我的代码有什么问题呢?

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方法打印所有值,所以我知道树是可以的。可能是什么问题?谢谢!

1 个答案:

答案 0 :(得分:3)

这个条件

while(root != null || root.getVal() == val)
root为空时,

会给你一个NullPointerException。

你可能想要

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