J'ai une structure d'arbre binaire très simple, quelque chose comme:Comment obtenir la taille d'un arbre binaire?
struct nmbintree_s {
unsigned int size;
int (*cmp)(const void *e1, const void *e2);
void (*destructor)(void *data);
nmbintree_node *root;
};
struct nmbintree_node_s {
void *data;
struct nmbintree_node_s *right;
struct nmbintree_node_s *left;
};
Parfois j'ai besoin d'extraire un « arbre » d'une autre et j'ai besoin pour obtenir la taille de « l'arbre extrait » afin de mettre à jour le taille de l'arbre initial.
Je pensais à deux approches:
1) En utilisant une fonction récursive, quelque chose comme:
unsigned int nmbintree_size(struct nmbintree_node* node) {
if (node==NULL) {
return(0);
}
return(nmbintree_size(node->left) + nmbintree_size(node->right) + 1);
}
2) Un pré-commande/afinde/postorder traversal fait dans un itérative façon (en utilisant la pile/file d'attente) + compter les noeuds. D'après vous, quelle approche est la plus «à l'épreuve des défaillances de la mémoire»/performante, selon vous?
D'autres suggestions/conseils?
NOTE: Je vais probablement utiliser cette implémentation dans le futur pour de petits projets. Donc, je ne veux pas échouer de façon inattendue :).
Est-ce ce devoir? Si oui, veuillez ajouter l'étiquette 'homework'. – sbi
Ce n'est pas un devoir, je ne fais que mettre en place un arbre binaire. –