1
Rotations Simples
1. /* rotation droite * / arbre * RD(arbre *a) {
arbre *tmp ; tmp = gauche(a) ; a->g = droit(tmp) ; tmp ->d = a ;
return tmp ; }
2. /* rotation gauche * /
La fonction rotation gauche RG peut être obtenue en remplaçant dans la fonction RD g par d et d par g.
arbre * RD(arbre *a) { arbre *tmp ;
tmp = droit(a) ; a->d = gauche(tmp) ; tmp ->g = a ;
return tmp ; }
2
Rotations Doubles
3. Rotation-Gauche-Droit : RGD
arbre * RGD(arbre *a) { a->g = RG( gauche(a)) ; return RD (a);
}
4. Rotation-Droit-Gauche : RDG
arbre * RDG(arbre *a) { a->d = RD( droit(a)) ; return RG (a);
}
3
Arbres AVL
Les arbres AVL (Adelson-Velskii et Landis : AVL) La 1ere classe des arbres équilibrés introduite en 1962 Un arbre AVL vérifie la propriété fondamentale suivante:
Pour tout nœud, la différence entre les hauteurs des fils gauche et des fils droit ne peut excéder 1.
Soit Fact la fonction de déséquilibre sur les abr définies par :
. Fact(arbre_vide) = 0
. Fact(R, G,D) = Hauteur(G) – Hauteur(D)
Alors un arbre A est H-équilibré si pout tout s/a S de A on a : Fact(S) € {-1,0,+1 }
Rééquilibrage
Fact (A) = 0 (ou 1 ou -1) Rééquilibrage(A) = A
Fact (A) = +2 et Fact (g(A)) = +1 Rééquilibrage(A) = RD(A) Fact (A) = -2 et Fact (d(A)) = -1 Rééquilibrage(A) = RG(A) Fact (A) = +2 et Fact (g(A)) = -1 Rééquilibrage(A) = RGD(A) Fact (A) = -2 et Fact (d(A)) = +1 Rééquilibrage(A) = RDG(A)