[英]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.