BST包含在JAVA中无法正常工作的方法

时间:2015-09-24 02:59:34

标签: java recursion binary-search-tree

我正在编写一种方法来查看BST中是否存在值。

 public boolean contains(int val){
        return containsHelper(val, root);
    }
    public boolean containsHelper(int val, Node root){


        if(val < root.val && root.left != null) {
            containsHelper(val, root.left);
        }
        else if(val > root.val && root.right != null) {
            containsHelper(val, root.right);
        }
        else { //theyre equal
            return true;
        }

        return false;

    }

我不明白为什么我的方法不起作用,它进入其他地方相等,但仍然返回假。

2 个答案:

答案 0 :(得分:1)

考虑添加明确的基本案例。以及当你想要返回true时的明确情况。

public boolean contains(int val){
    return containsHelper(val, root);
}
public boolean containsHelper(int val, Node root){
    if(root == null) return false;

    if(root.val == val) return true;
    else if (root.val < val) {
        return containsHelper(val, root.right);
    }else {
        return containsHelper(val, root.left);
    }
}

答案 1 :(得分:1)

此逻辑不正确:else { //theyre equal不正确。 在您的代码中,当elseroot.leftroot.right时,此null块也会被执行 代码应如下所示:

if(val < root.val) {
    if(root.left != null)
        return containsHelper(val, root.left);
    // not going to find val
    else return false;
}
else if(val > root.val) {
    if(root.right != null)
        return containsHelper(val, root.right);
    // not going to find val
    else return false;
}
else { //theyre equal
return true;
}