我想为二进制搜索树编写搜索功能。如何编写它以便我可以从基本情况if(root.data == node.data){return node;}
返回,而不会收到有关该方法返回任何内容的编译器警告。在这种情况下,root是一个ivar,它是BST类的一部分,这些方法是其中的一部分。
-(Node*)search:(Node*)node{
if(root == nil){
return node;
}
if(root.data == node.data){
return node;
}
if (node.data < root.data){
root = root.left;
[self search:root];
}
if (node.data > root.data) {
root = root.right;
[self search:root];
}
}
答案 0 :(得分:0)
您收到错误是因为在某些条件下您没有从search:
方法返回任何内容。你必须归还一些东西。递归调用search:
时,也不会使用返回值。
您在更新root
时也遇到问题。你不想这样做。
你可能想要更像这样的东西:
- (Node *)search:(Node *)node {
if (root == nil) {
return node;
}
if (root.data == node.data) {
return node;
} else if (node.data < root.data) {
return [self search:node.left];
} else // node.data > root.data
return [self search:node.right];
}
}
答案 1 :(得分:-1)
如果你的前两个if测试都没有,那么你的方法不会返回任何内容。 尝试;
if (node.data < root.data){
root = root.left;
return [self search:root];
}
if (node.data > root.data) {
root = root.right;
return [self search:root];
}
return ? // you need a return value here