1
我看到訪問所有節點(如果密鑰未知)的唯一方法是twalk
。 twalk
內允許使用tdelete
嗎?如果沒有 - 如何刪除所有節點? (我不wan't使用非便攜GNU擴展tdestroy
。)如何從POSIX二進制(tsearch)樹中刪除所有節點?
我看到訪問所有節點(如果密鑰未知)的唯一方法是twalk
。 twalk
內允許使用tdelete
嗎?如果沒有 - 如何刪除所有節點? (我不wan't使用非便攜GNU擴展tdestroy
。)如何從POSIX二進制(tsearch)樹中刪除所有節點?
不,你不需要使用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);
}
...