Les Arbres Bicolores (Rouge et Noir) On a vu que les arbres AVL et les arbres B sont des structures de données à critère d’équilibre. L’inconvénient que ses structures possèdent c’est qu’ils nécessitent plusieurs opérations de regroupement ou d’éclatement après une opération d’insertion ou de suppression. Aussi, la hauteur n’est pas vraiment maintenue au niveau des feuilles. La structure de données d’arbre rouge et noir nécessite des opérations minimales après une mise à jour pour conserver sa propriété d’arbre équilibré. Définition : Un arbre rouge et noir est un arbre binaire de recherche où chaque nœud est de couleur rouge ou noire de telle sorte que : 1. Les feuilles sont nulles et noires, 2. Les fils d'un nœud rouge sont noirs, (ou bien le père d’un nœud rouge est toujours noir) 3. Toutes les feuilles ont la même hauteur noire : Le nombre des nœuds noirs (internes) dans un chemin de la racine à n’importe quelle feuille est identique. Exemple : Un arbre noir avec hauteur noire égale à 3. 17 23 7 21 3 31 11 22 18 29 19 Propriétés : - Le nombre des feuilles égale au nombre des nœuds internes plus 1. - Le nombre des nœuds noirs internes est majoritaire (supérieur au noeuds rouges). Autrement dit, l’hauteur noire > l’hauteur/2. - On ne peut pas avoir deux nœuds rouges successifs le long d’un chemin de la racine vers une feuille. Opération de Rotation et de Changement de Couleur : Afin de rééquilibrer un arbre bicolore lors d’une mise à jour, on commence d’abord par étudier les propriétés des opérations suivantes : 1 – Factorisation distribution de la couleur noire : Factorisation P Distribution Y X P X Y Dans ces deux cas l’hauteur noire n’est pas changée. 2 – Rotation à gauche et à droite : P X Rotation à droite P X Y X1 Rotation à gauche X1 X2 X2 Y Insertion dans un arbre rouge-noir : L’insertion d’une clé X dans un arbre bicolore est identique à celle d’un ABR. Alors, une feuille nulle sera éliminée et remplacée par X, et deux nouvelles feuilles nulles seront crées et accrochées à X. La couleur de X sera rouge pour que la hauteur noire de l’arbre ne se modifie pas. 30 30 Insertion de 31 29 29 31 Si le Père est noir, toutes les conditions d’équilibre de l’arbre bicolore sont respectées. Si le Père est Rouge, la deuxième condition d’équilibre n’est plus respectée. Alors on distingue 4 cas : 1er Cas : Le père P est la racine : Alors on change la couleur de P en noir. C’est le seul cas où la hauteur noire est incrémentée. P P X X Y X1 Y X2 X1 X2 2ème Cas : Le frère de P (F) est rouge : Dans ce cas, le grand père G doit être noir. Alors on distribue la couleur noire vers P et F. G G P P F X F X F1 F2 F1 Y X1 F2 Y X2 X1 X2 C’est le seul cas où on doit vérifier plus haut si la deuxième condition d’équilibre est encore vérifiée. Dans le pire des cas, on effectue lg2(n) opérations de changement de couleurs. 3ème Cas : Le frère de P (F) est noir : Si X est le fils gauche de P, alors on effectue une rotation à droite entre P et G en changeant leurs couleurs. G P P F G X X F F1 Y X1 X2 F2 X1 X2 Y F1 F2 On note que les sous arbres enracinés à X1, X2 et Y ont au moins un nœud noir pour faire l’équilibre avec le nœud noir F. Si X est le fils droit de P, alors on effectue d’abord une rotation à gauche entre X et P, puis une rotation à gauche entre X et G en changeant leurs couleurs. G G P F X X F P F1 F2 F1 F2 X2 Y X1 X2 Y X1 X G P F Y X1 X2 F1 F2 Suppression d’un arbre rouge-noir : La suppression d’une clé X d’un arbre bicolore est identique à celle d’un ABR. Alors, Dans le cas ou le nœud X a plusieurs descendants, on sélectionne un nœud du SAG ou du SAD contenant la clé Y pour le supprimer. La suppression du nœud Y ne pose aucun problème vis-à-vis l’équilibre noir si ce nœud est rouge. Par contre, si le nœud à supprimer est noir, on doit effectuer des opérations de rééquilibrage afin de régler l’hauteur noir de l’arbre. 30 30 Suppression de 40 20 20 40 45 55 30 20 40 45 55 55 45