J'ai un arbre défini comme,mémoire allouée pour Libérant un arbre - C
struct tree {
char label[MAX_LENGTH];
char value[MAX_LENGTH];
struct tree *child;
struct tree *next;
};
Maintenant, je dois libérer la mémoire allouée par cet arbre. J'ai écrit le code suivant.
unsigned int tree_free(struct tree *root)
{
struct tree *current = NULL, *next = NULL, *child = NULL;
unsigned int freecnt = 0;
current = root;
while(current != NULL)
{
next = current->next;
child = current->child;
xfree(current);
freecnt += tree_free(child) + 1;
current = next;
}
return freecnt;
}
Cette méthode renvoie le nombre d'éléments qu'elle a libérés afin que je puisse le vérifier par rapport au nombre d'allocations effectuées. Ce code fonctionne. Mais je ne suis pas sûr que ce soit la bonne façon de faire les choses.
Ceci est une implémentation d'arborescence de suffixes. Pour les articles de, pile, plus, trop-plein, Stackoverflow l'arbre ressemblera
root
-s
--stack
---stackoverflow
-over
--overflow
Toutes les suggestions pour améliorer le code sont les bienvenus.
Vous avez omis quelques détails: (1) quelle est la structure de l'arbre? du code on peut voir que ce n'est pas l'arbre binaire "vanilla". (2) qu'est-ce que 'xfree'? –
Ce n'est pas un arbre binaire. C'est un arbre de suffixe type d'implémentation. xfree est juste un wrapper autour de free(). Un arbre aura plusieurs éléments enfants et pas seulement deux comme un arbre binaire. –
édité mon message pour le rendre clair. –