1
すべてのノードにアクセスするための唯一の方法(鍵がわからない場合)はtwalk
です。 tdelete
をtwalk
の中に使用できますか?そうでない場合 - どのようにすべてのノードを削除しますか? (私は非ポータブルGNU拡張tdestroy
を使用するwan'tはありません。)POSIXバイナリ(tsearch)ツリーからすべてのノードを削除する方法はありますか?
すべてのノードにアクセスするための唯一の方法(鍵がわからない場合)はtwalk
です。 tdelete
をtwalk
の中に使用できますか?そうでない場合 - どのようにすべてのノードを削除しますか? (私は非ポータブルGNU拡張tdestroy
を使用するwan'tはありません。)POSIXバイナリ(tsearch)ツリーからすべてのノードを削除する方法はありますか?
、あなたは比較関数(挿入するために使用したのと同じ機能)と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);
}
...