二进制搜索树搜索返回Null

时间:2014-01-14 10:17:02

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

我在java中编写了一个功能齐全的二叉搜索树,除了一个关键功能,即搜索。我正在使用逻辑,我将检查root是否为null,然后如果我要搜索的术语等于root(所以返回root)或> root(所以搜索右子树)或< root(搜索右子树)使用递归方法。通过调用searchBST(String)来启动搜索。

使用printlns查看发生了什么我发现如果值存在,它将通过正确的if语句(包括将BNode n设置为找到的值)但是由于某种原因将再次通过该方法(返回null) )。

此方法唯一有效的方法是搜索根节点时,这对我来说毫无意义。

    public BNode search(BNode par, String k){
    BNode n = null;

     if (par != null){
        if ((k.compareTo(par.obj.getKey()) < 0) && (par.left != null)){
            search(par.left, k);
        } 

         if ((k.compareTo(par.obj.getKey()) > 0) && (par.right != null)){
            search(par.right, k);
        } 

        if (k.compareTo(par.obj.getKey()) == 0){
          n = par;    
        } 
    }

    return n;

}

public AnyClass searchBST(String k){
    if (search(root, k) != null)
    return search(root, k).obj; 

    return null;
}

1 个答案:

答案 0 :(得分:2)

我想你错过了一些回复陈述:

public BNode search(BNode par, String k){
    BNode n = null;

     if (par != null){
        if ((k.compareTo(par.obj.getKey()) < 0) && (par.left != null)){
            return search(par.left, k);
        } 

         if ((k.compareTo(par.obj.getKey()) > 0) && (par.right != null)){
           return search(par.right, k);
        } 

        if (k.compareTo(par.obj.getKey()) == 0){
          n = par;    
        } 
    }

    return n;
}