#include "abr.h" Abr creerArbreVide(void) { return NULL; } Booleen estArbreVide(Abr a){ if(a == NULL) return TRUE; return FALSE; } Noeud* creerNoeud(int val){ Noeud* tmp = (Noeud*)malloc(sizeof(Noeud)); if(tmp == NULL) exit(1); tmp->val = val; tmp->fd = NULL; tmp->fg = NULL; return tmp; } void insererEnFeuille(Abr* pta, int val){ if(*pta == NULL) *pta = creerNoeud(val); else if(val <= (*pta)->val) insererEnFeuille(&(*pta)->fg, val); else insererEnFeuille(&(*pta)->fd, val); } void viderArbre(Abr *pta){ if(*pta == NULL) return; viderArbre(&(*pta)->fg); viderArbre(&(*pta)->fd); free(*pta); *pta = NULL; } // void afficherCroissant(Abr a){ // printf("%d ", ) // if(a->fg != NULL) printf("%d ", a->val); // if(a->fg == NULL) { // printf("%d ",a->val); // return afficherCroissant(a->fd); // } // else if(a->fd == NULL) return; // else return afficherCroissant(a->fg); // } // void afficherDecroissant(Abr a){ // if(a->fd == NULL) { // printf("%d ",a->val); // return afficherDecroissant(a->fg); // } // else if(a->fg == NULL) return; // else return afficherDecroissant(a->fd); // } void afficherNtab(int n){ for(int i = 0; ifd != NULL){ afficherCoucheRec(a->fd, retrait+1); afficherNtab(retrait); printf(" / \n"); } afficherNtab(retrait); printf("%d\n", a->val); if(a->fg != NULL){ afficherNtab(retrait); printf(" \\ \n"); afficherCoucheRec(a->fg, retrait+1); } } void afficherCouche(Abr a){ if(a!=NULL) afficherCoucheRec(a,0); } Booleen rechercherVal(Abr a, int val){ Booleen rep; if(a == NULL) return FALSE; if(a->val == val) return TRUE; rep = rechercherVal(a->fg, val); if(rep == FALSE || !rep) rep = rechercherVal(a->fd, val); return rep; } int oterMax(Abr* pta){ Noeud* tmp; int val; if((*pta)->fd == NULL){ tmp = *pta; val = tmp->val; *pta = (*pta)->fg; free(tmp); } else{ val = oterMax(&(*pta)->fd); } return val; } Booleen supprimerVal(Abr *pta, int val){ Noeud* tmp; if(*pta == NULL) return TRUE; if((*pta)->val == val){ if((*pta)->fg == NULL){ tmp = *pta; *pta = (*pta)->fd; //! si fd est aussi nul, alors *pta sera null ! free(tmp); } else if((*pta)->fd == NULL){ tmp = *pta; *pta = (*pta)->fg; free(tmp); } else{ (*pta)->val = oterMax(&(*pta)->fg); } return TRUE; } //sinon on continue dans la suite de l'arbre else if(val < (*pta)->val) return supprimerVal(&(*pta)->fg, val); else return supprimerVal(&(*pta)->fd, val); }