我得到一个函数的警告,我不知道如何编写函数,所以我不会再得到那个警告了

时间:2017-03-27 12:11:48

标签: c search tree warnings

因此,这是基于该节点的id在树中简单搜索节点的代码:

NodeT *searchNode(NodeT *parent, int id)
{
    if(parent == NULL) printf("\nThere is no tree.");
    if(parent->id == id)
        return parent;
    else
    {
        if(parent->left != NULL) searchNode(parent->left, id);
        if(parent->right != NULL) searchNode(parent->right, id);
    }
}

我也得到了这个:警告:控制到达无效功能的结束[-Wreturn-type] |

节点定义如下:

typedef struct node_type
{
    char id;
    struct node_type *left, *right;
} NodeT;

有什么方法可以摆脱那个警告吗?

1 个答案:

答案 0 :(得分:0)

您的功能仅在某些情况下返回某些内容。警告告诉您在任何情况下都需要退货。对于代码cos,这是一个非常重要的警告,因为它还突出了几个错误。

if(parent == NULL) printf("\nThere is no tree.");
if(parent->id == id)

如果parentNULL会怎样?它打印出错误消息然后继续到下一行并将崩溃。如果它是真的,你希望第一个if也有一个return语句,这样代码就不会继续,或者将其余的函数代码放入else块。

接下来,如果您的树中有多个节点会发生什么?你遍历树,但忽略了结果!如果你搜索一个不存在的节点,你也不会为此返回任何内容。

因此,如果代码无法找到结果或者通过递归调用自身返回传递给它的结果,则应将代码更改为return NULL