簡體   English   中英

如何從POSIX二進制(tsearch)樹中刪除所有節點?

[英]How to remove all nodes from a POSIX binary (tsearch) tree?

我看到的訪問所有節點的唯一方法(如果密鑰未知)是twalk 允許在tdelete內使用twalk嗎? 如果不是,如何刪除所有節點? (我不想使用不可移植的GNU擴展tdestroy 。)

不,您不需要使用twalk ,可以將tdelete與比較功能(用於插入的功能相同)一起使用, 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);
    }

    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM