二进制搜索树字符串搜索

时间:2016-12-02 17:14:26

标签: java binary-tree

我有一个程序,我需要在二叉树中搜索特定的单词,我为该字符串的搜索方法提出的代码不起作用。如果有人能看一眼,我会非常感激。

我尝试了一些改动,但它仍然没有用。

public boolean check(BSTNode t,String key){
    if(!t.word.equals(key)){
        check(t.left,key);
        check(t.right,key);
    }
    else{
        return true;
    }
    return false;
}

1 个答案:

答案 0 :(得分:2)

这可以这样写;

public boolean check(BSTNode t,String key) {
    return 
      t.word.equals(key) || check(t.left,key) || check(t.right,key)
}

或者,更详细;

public boolean check(BSTNode t,String key) {
    if (t.word.equals(key)) return true;

    if (check(t.left,key)) return true;

    if (check(t.right,key)) return true;

    return false;
}

您不需要很多else语句,因为return语句会在函数中停止执行。

修改

您还必须检查您的BSTNode是否为空,或者当您到达树的末尾时,您将获得空指针异常。这可以在函数开始时或在内部递归check调用之前完成:

public boolean check(BSTNode t,String key) {

    if (t == null) return false;

    if (t.word.equals(key)) return true;

    if (check(t.left,key)) return true;

    if (check(t.right,key)) return true;

    return false;
}

或;

public boolean check(BSTNode t,String key) {
    if (t.word.equals(key)) return true;

    if (t.left != null && check(t.left,key)) return true;

    if (t.right != null && check(t.right,key)) return true;

    return false;
}