2016-09-19 4 views

答えて

2

、あなたは比較関数(挿入するために使用したのと同じ機能)とtdeleteを使用することができません、あなたはtwalkを使用する必要はありませんtdeleteはルートノードを変更するので、while (root != NULL)を渡して削除すると、次のようなトリックが実行されます。

typedef struct { 
    int key; 
    char value[50]; 
} t_data; 

static int comp(const void *pa, const void *pb) 
{ 
    const t_data *a = pa, *b = pb; 

    if (a->key > b->key) return +1; 
    if (a->key < b->key) return -1; 
    return 0; 
} 

int main(void) 
{ 
    void *root = NULL; 
    t_data *data;  

    ... 

    while (root != NULL) { 
     data = *(t_data **)root; 
     tdelete(data, &root, comp); 
     free(data); 
    } 

    ... 
関連する問題