作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我看到访问所有节点(如果 key 未知)的唯一方法是twalk
。是否允许在 twalk
中使用 tdelete
?如果不是——如何删除所有节点? (我不想使用不可移植的 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);
}
...
关于c - 如何从 POSIX 二叉树(tsearch)中删除所有节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39569621/
我是一名优秀的程序员,十分优秀!