用于二进制搜索树搜索功能的目标C中的返回语句

时间:2016-05-31 22:09:30

标签: objective-c

我想为二进制搜索树编写搜索功能。如何编写它以便我可以从基本情况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];
    }
}

2 个答案:

答案 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