首页 > 解决方案 > 如何使用双指针释放树结构?

问题描述

我必须释放一棵树并使用特定函数将其根设置为 NULL。我尝试使用递归方法。但是如果我编译我会收到一些关于“不兼容的指针类型”的警告,我无法解决它。这是结构:

typedef struct node {
int key; 
struct node *left, *mid, *right;
} node_t;

这里是功能。第一行不能更改:

void free_tree (node_t ** root){
if(root != NULL){
    free_tree((*root)->left);
    free_tree((*root)->mid);
    free_tree((*root)->right);
    free(*root);
    }
return;
}

任何帮助,将不胜感激

标签: cpointerstreedouble-pointer

解决方案


你的问题不能很清楚地回答,但至少我可以告诉你为什么你有这个警告incompatible pointer type

你的函数原型是

void free_tree (node_t ** root);

它的论点是一个node_t **.

你的结构是

typedef struct node {
    int key; 
    struct node *left, *mid, *right;
} node_t;

所以在你的功能中:

void free_tree (node_t ** root)
{
    if(root != NULL)
    {
        free_tree((*root)->left);   <<< '(*root)->left' is of type 'node_t *'
        free_tree((*root)->mid);    <<< '(*root)->mid' is of type 'node_t *'
        free_tree((*root)->right);  <<< '(*root)->right' is of type 'node_t *'
        free(*root);
    }
    return;
}

您称您为函数提供一个node_t *as 参数,而您的函数需要一个node_t **


推荐阅读