
Sommet *EquilibreSousArbre(Sommet *UnABR) { Sommet *Tempo; if(!UnABR) return UnABR; if(!SousArbreGauche(UnABR) && !SousArbreDroit(UnABR)) return UnABR; if(!SousArbreDroit(UnABR)) if(!SousArbreDroit(SousArbreGauche(UnABR)) && SousArbreGauche(SousArbreGauche(UnABR))) { Tempo=SousArbreGauche(UnABR); AccrocheGauche(UnABR,ArbreVide()); AccrocheDroite(Tempo,UnABR); return Tempo; }; if(!SousArbreGauche(UnABR)) if(!SousArbreGauche(SousArbreDroit(UnABR)) && SousArbreDroit(SousArbreDroit(UnABR))) { Tempo=SousArbreDroit(UnABR); AccrocheDroite(UnABR,ArbreVide()); AccrocheGauche(Tempo,UnABR); return Tempo; }; AccrocheGauche(UnABR,EquilibreSousArbre(SousArbreGauche(UnABR))); AccrocheDroite(UnABR,EquilibreSousArbre(SousArbreDroit(UnABR))); return UnABR; }; void Equilibre() { int Prof=Profondeur(Racine); while(Prof) { Racine=EquilibreSousArbre(Racine); Prof--; } }; int Profondeur(Sommet *UnABR) { int valeur; if(!UnABR)return 0; valeur=1+Maximum(Profondeur(SousArbreGauche(UnABR)),Profondeur(SousArbreDroit(UnABR))); return valeur; }; int Maximum(int Val1,int Val2) { if(Val1>Val2)return Val1; return Val2; }; Il faut juste savoir que SousArbreDroit ou SousArbreGauche correspond au fils d'un arbre genre UnABR->FilsGauche... Pour finir AccrocheGauche ou AccrocheDroit correspondent tout simplement à UnABR1->FilsGauche=UnABR2; ou UnABR1 et UnABR2 sont les arguments de la fonction.
void AbreVide (void) { Sommet *Tempo=NULL; return Tempo; }
geogeo :
En passant quelqu'un pourrais m'expliquer comment insérer des chaîne de caractères dans un ABR pour rechercher un mot très rapidement car je ne sais pas comment faire.
geogeo :
Ah désolé mais j'ai pas compris comment ça marche.