微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于二叉搜索树搜索功能的警告

如何解决关于二叉搜索树搜索功能的警告

node* search(node* root,int data)
   {

    if(root==NULL||root->data==data)
    {
        if(root->data==data)
            cout<<"Found\n";
       
            return root;

    }
      
    if(data<root->data) 
       return search(root->left,data);

    if(data>root->data)
       return search(root->right,data);
   }

上面的代码用于在二叉搜索树中搜索一个键,它给出了一个警告:控制到达非空函数的结尾[-Wreturn-type]

如何去除这个警告? 提前致谢

解决方法

函数的返回类型是 node*

来自IBM Knowledge Center

如果控制到达函数的末尾并且没有遇到返回,GCC 假定返回没有返回值。但是,为此,该函数需要一个返回值。在函数的末尾添加一个 return 语句,该语句返回一个合适的返回值,即使控制从未到达那里。

您正在检查函数中的 3 个条件 - 等于、小于和大于。

所以,编译器很好奇,如果它们都不满足,那么在函数末尾应该有一个 return 语句,因为函数的返回类型是非 void。

去掉第三个if块,直接返回search(root->right,data);如下:

node* search(node* root,int data)
{

    if(root==NULL||root->data==data)
    {
        if(root->data==data)
            cout<<"Found\n";
    
        return root;
    }
    
    if(data<root->data) 
        return search(root->left,data);

    return search(root->right,data);
}

这会起作用,因为第三个条件已经被上述两个条件处理了,即,如果某个值不等于或小于某个值,则该值肯定大于该值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。