Chapitre 3 (fin). Les arbres AVL Andelson –Velskii et Landis Les auteurs de arbres AVL
Les ABOH ont le défaut de pouvoir être déséquilibrés Les ABOH ont le défaut de pouvoir être déséquilibrés. Les AVL sont des ABOH qui garantissent un équilibre partiel. Il n’y a pas d’éléments identiques. Les algorithmes Ajout et Suppression tiennent compte de l’équilibre, ils réorganisent l’équilibre de l’arbre. Structure d’un AVL typedef struct noeud_avl { T info; -1 hsag - hsad = 1 int balance; 0 hsag = hsad struct avl sag,, sad ; +1 hsad - hsag = 1 } noeud_avl; typedef noeud_avl* avl
Ajout dans un AVL A est un nœud le plus proche du nœud inséré avec le facteur de balance devenu 2 après la dernière insertion. (Ascendant du nœud inséré) GG : nouveau sommet Y est inséré dans le sag de sag de A. GD : nouveau sommet Y est inséré dans le sad de sag de A. DD : nouveau sommet Y est inséré dans le sad de sad de A. DG : nouveau sommet Y est inséré dans le sag de sad de A. GG est symétrique à DD, et GD est symétrique à DG. Donc, il suffit de voir comment le rééquilibrage est fait pour le cas gauche-gauche et le cas gauche-droite. Les cas droite-droite et droite-gauche sont gérés de façon symétrique.
Cas gauche-gauche Si le dépassement de hauteur du sag est du à une augmentation de hauteur de son propre sag, on est dans le cas gauche-gauche. La situation et la réorganisation nécessaire sont les suivantes : -1 h h h
On rajoute un élément dans le sag du sag de A. A B B A On effectue une rotation : A dévient le fils droit du B, le fils droit du B dévient le fils gauche du A. -2 -1 h h + h h h + h 1 1
Cas gauche-droite Si le dépassement de hauteur du sag est du à une augmentation de hauteur de son sad, on est dans le cas gauche-droite. La situation et la réorganisation nécessaire sont les suivantes : a) A On rajoute un élément dans le sad B du sag de A. A C B B A C On effectue une rotation : A dévient le fils droit du C, B dévient le fils gauche du C. -1 -2 1
On rajoute un élément dans le sag du C. b. A B h C h h-1 h-1 On rajoute un élément dans le sag du C. -1
A C B A B h C h h h-1 h h-1 h-1 +1 On effectue une rotation : A dévient le fils droit du C, B dévient le fils gauche du C, le fils gauche du C dévient le fils droit du B, le fils droit du C dévient le fils gauche du A. -2 1 1 -1
On rajoute un élément dans le sad du C. B h h C h-1 h-1 On rajoute un élément dans le sad du C. -1
On effectue une rotation : B A h h-1 h h h A B h h C h-1 h-1 +1 On effectue une rotation : A dévient le fils droit du C, B dévient le fils gauche du C, le fils gauche du C dévient le fils droit du B, le fils droit du C dévient le fils gauche du A. -2 -1 1 1