我尝试了这个,但是我收到编译时错误。我错过了什么?如果找不到元素,我也必须返回false
public boolean search(Node root, Node node){
if(root==node){
return true;
}
if(root.getLeft()!=null){
search(root.getLeft(), node);
}
if(root.getRight()!=null){
search(root.getRight(), node);
}
}
答案 0 :(得分:4)
您遇到编译错误,因为您并不总是返回一些内容:
if(root.getLeft()!=null){
search(root.getLeft(), node);
}
if(root.getRight()!=null){
search(root.getRight(), node);
}
这将修复编译错误,但不会修复算法:
if(root.getLeft()!=null){
return search(root.getLeft(), node);
}
if(root.getRight()!=null){
return search(root.getRight(), node);
}
这应修复算法:
if(root.getLeft()!=null && search(root.getLeft(), node)) {
return true;
}
if(root.getRight()!=null && search(root.getRight(), node)){
return true;
}
return false;
答案 1 :(得分:1)
public boolean search(Node root, Node node){
if(root == node){
return true;
}
boolean found = false;
if(root.getLeft() != null ){
found = search(root.getLeft(), node);
}
if(!found && root.getRight() != null )
{
found = search(root.getRight(), node);
}
return found;
}