我正在编写一种方法来查看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;
}
我不明白为什么我的方法不起作用,它进入其他地方相等,但仍然返回假。
答案 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
不正确。
在您的代码中,当else
或root.left
为root.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;
}