Arbre unification(Arbre arbre) { assert(arbre != NULL); //printf("\n %d %d",isUni(arbre),arbre->couleur); if(is_feuille(arbre)) return arbre; if(isUni(arbre)) { arbre->couleur = arbre->fils[NO]->couleur; // printf(" %d ",arbre->couleur); freeArbre(&arbre->fils[NO]); freeArbre(&arbre->fils[NE]); freeArbre(&arbre->fils[SO]); freeArbre(&arbre->fils[SE]); return arbre; } else { unification(arbre->fils[NO]); unification(arbre->fils[NE]); unification(arbre->fils[SO]); unification(arbre->fils[SE]); return arbre; } }
int main() { Liste l1=Exemple1(); Liste l2=Exemple2(); printf("Liste1 de 7 elements :\n"); afficherliste(l1); printf("Liste2 de 6 elements :\n"); afficherliste(l2); Arbin a1=la(l1); Arbin a2=la(l2); printf("Affichage de l'arbre1\n"); afficherArbre(a1); printf("Affichage de l'arbre2\n"); afficherArbre(a2); printf("\n"); Liste l3=al(a1); printf("al sur arbre1 :\n"); afficherliste(l3); Arbin u0=union0(a1,a2); Arbin u1=union1(a1,a2); printf("Affichage de union0 :\n"); afficherArbre(u0); printf("Affichage de union1 :\n"); afficherArbre(u1); printf("Oter le minimum de l'arbre1\n"); Arbin o=om(a1); afficherArbre(o); Arbin i=ins(a1,42); printf("Insertion de 42 dans l'arbre1\n"); afficherArbre(i); freeListe(l1); freeListe(l2); freeListe(l3); freeArbre(a1); freeArbre(a2); freeArbre(u0); freeArbre(u1); freeArbre(o); freeArbre(i); return 0; }
void freeArbre(Arbre * arbre) { //printf("\n***Free***"); if(*arbre == NULL) { return; } // printf("\t*Free fils*"); int i; for(i=0; i<NB_FILS; i++) { // printf("\n\t |_ "); freeArbre(&(*arbre)->fils[i]); //(*arbre)->fils[i] = NULL; } free(*arbre); *arbre = NULL; }