我有一个程序,我需要在二叉树中搜索特定的单词,我为该字符串的搜索方法提出的代码不起作用。如果有人能看一眼,我会非常感激。
我尝试了一些改动,但它仍然没有用。
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;
}
答案 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;
}