( aboh avl quoi)
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.

