递归到达非无效的二进制搜索树

时间:2018-12-08 16:55:27

标签: c++

我得到警告,说它到达了非void函数的结尾。应该在二进制搜索树中搜索。如果认为合适,则返回SUCCESS。 我该怎么解决?

TREEResult FindInBST(Node<T>* node,int key, void** value,int treeSize)
    {
        if(node!=NULL && node->key==key)
        {
            *value=node->data;
            return SUCCESS;
        }
        if(treeSize==0)
        {
            return FAILURE;
        }
        if(node->key<key)
        {   treeSize--;
            FindBST(node->rightSon,key,value,treeSize);
        }
        else
        {   treeSize--;
            FindBST(node->LeftSon,key,value,treeSize);
        }

    }

1 个答案:

答案 0 :(得分:1)

您保证会返回TREEResult,但不会在两个递归调用中返回。值得庆幸的是,编译器对此发出警告,因为违反此规则是未定义行为。

要解决此问题,您需要更改:

FindBST(node->rightSon,key,value,treeSize);

return FindBST(node->rightSon,key,value,treeSize);

还有

FindBST(node->LeftSon,key,value,treeSize);

return FindBST(node->LeftSon,key,value,treeSize);

正如@molbdnilo在评论中提到的,与非递归调用相比,递归调用没有“魔术”。 如果您要退货,则需要这样做。

无法返回值是未定义行为。

这些递归调用返回的值将从基本情况下返回的SUCCESS或FAILURE结果之一传播,具体取决于搜索是否找到了该项目。