2016-05-31 45 views
0

我想为二叉搜索树编写搜索函数。我如何编写它,以便我可以从基本案例if(root.data == node.data){return node;}返回而不会收到有关该方法不返回任何内容的编译器警告。在这种情况下,root是这些方法所属BST类的一部分。目标C中的二叉搜索树返回声明搜索函数

-(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

你得到的错误,因为你没有在一定条件下你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]; 
    } 
} 
+0

我不知道我能在这样一个return语句调用一个方法。谢谢。 – noobsmcgoobs

+0

'return'采取任何有效的表达式。当然你也可以把'[self search:root];'的结果赋给一个变量,然后返回变量。 – rmaddy

+0

但如果该方法返回一个对象(在本例中为节点),则每个if语句都必须返回一个对象?我不能只是回报;对于第一种情况? – noobsmcgoobs

-1

如果前两个如果测试都不是真的,你的方法不会返回任何东西。 尝试;

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