Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parPaule Moi Modifié depuis plus de 10 années
1
Arbres Rouge noir Démo : INF3105 Structures de données et algorithmes
Groupe : 30 Monitrice : Kerlyne Fostine Courriel :
2
Arbres rouge noir - Définition
Arbre binaire de recherche dans lequel chaque nœud a un attribut supplémentaire : sa couleur, qui est soit rouge soit noire. L’arbre a les propriétés suivantes: Chaque noeud est soit rouge soit noir La racine est noire Si un noeud est rouge, tous ses enfants doivent être noirs À partir de n’importe quel noeud, tous les chemins de la racine jusqu’à un pointeur NULL doivent avoir le même nombre de noeuds noirs
3
Arbres rouge noir - Exemple
30 70 15 10 20 60 85 5 50 65 80 90 40 55
4
Arbres rouge noir - exemple
30 70 15 10 20 60 85 5 50 65 90 80 40 55
5
Arbres rouge noir – exemple
6
Arbres rouge noir – Contre exemple
30 70 15 10 60 85 2 noeuds noirs 90 5 50 65 80 83 95 40 55 4 noeuds noirs
7
Arbre rouge noir - Structure
Chaque nœud d’un arbre rouge noir doit avoir : Un pointeur parent Un pointeur gauche Un pointeur droit Un champ couleur Un champ element Un champ clef Un nœud peut être : Une sentinelle nul qui sert à représenter les feuilles de l’arbre (Pas de valeur, pas d’élément, de couleur noire, clef de valeur minimum, champs parent, gauche, droite pointent a elle-même) Une sentinelle racine dont les champs parent et droite pointent a la sentinelle nul, sans element, de couleur noire et avec une clef de valeur maximum, et dont le champ de gauche indique le vrai nœud racine.
8
Arbre rouge noir – Insertion
Un noeud inséré est toujours une feuille On peut pas le colorier en noir, puisque cela violerait la condition 4 On colore le noeud en rouge Si le père est noir, pas de problème Si le père est rouge, on viole la condition 3. Dans ce cas, on ajuste l’arbre, par le biais de changements de couleurs et de rotations
9
Premier cas : Le frère du noeud parent est noir (on utilise la convention qu’un noeud NULL est noir)
Noeud inséré G P S X G P D E B S C A C X D E B A Rotation simple
10
Deuxième cas: le frère du noeud parent est noir (on utilise la convention qu’un noeud NULL est noir)
G X S P G P D E B S X A C D E B C Noeud inséré Rotation double
11
Exemple – Rotation simple
30 70 15 10 (NOIR) 20 60 85 5 3 65 80 90 50 (NOIR) 40 55 Rotation simple Noeud inséré
12
Exemple : Rotation simple (suite)
30 70 15 20 60 85 5 3 10 (NOIR) 90 50 65 80 (NOIR) 40 55
13
Exemple – Rotation simple (Suite)
30 70 15 20 60 85 5 3 10 (NOIR) 90 50 65 80 (NOIR) 40 55
14
Exemple – Rotation simple (suite)
30 70 15 20 60 85 5 3 10 (NOIR) 90 50 65 80 (NOIR) 40 55
15
Exemple - rotation simple (suite)
30 70 15 5 3 20 60 85 10 (NOIR) 90 50 65 80 (NOIR) 40 55
16
Exemple – Rotation simple (suite)
30 70 15 20 5 60 85 10 90 3 50 65 80 (NOIR) (NOIR) 40 55
17
Exemple - Double rotation
30 70 15 10 (NOIR) 20 60 85 65 90 5 50 80 (NOIR) 8 40 55 Noeud inséré
18
Exemple - Double rotation (Suite)
30 70 15 20 60 85 10 (NOIR) 90 5 50 65 80 (NOIR) 8 40 55
19
Exemple – Double rotation (Suite)
30 70 15 8 20 60 85 10 90 5 50 65 80 (NOIR) (NOIR) 40 55
20
Algorithme d’insertion
Insertion(z) Y = racine X = racine.gauche Tant que X != nul Y = X if X.clef > Z.clef X = X.gauche else X = X.droite Z.Parent = Y If Y = racine OU Y.clef > z.clef Y.gauche = Z Else Y.droite = Z Z.Gauche = nul Z.Droite = nul z.Couleur = Rouge ajusterInsertion(Z)
21
Algorithme d’insertion (suite)
ajusterInsertion(Z) Tant que couleur Z.parent = Rouge if Z.parent = Z.parent.parent.droite Y = Z.parent.parent.gauche if Couleur Y = Rouge Couleur Z.parent = noir Couleur Y = noir Couleur Z.parent.parent = Rouge Z = Z.parent.parent else if Z = X.parent.gauche Z = Z.parent Rotation droite z Couleur Z.parent = Noir Rotation fauche Z.parent.parent double rotation droite gauche Couleur Racine.gauche = Noir
22
Algorithme suppression
Suppression(Z) Valeur = Z.element If Z.gauche = nul OU Z.droite = nul Y = Z Else Y = Successeur Z If Y.gauche = nul X = Y.droite X = Y.gauche X.parent = Y.parent If Racine = X.parent Racine.gauche = X If Y = Y.parent.gauche Y.parent.gauche = X Y.parent.droite = X
23
Algorithme suppression (Suite)
If Y != Z Y.gauche = Z.gauche Y.droite = X.droite Y.parent = X.parent Z.gauche.parent = Z.droite.parent = Y if Z = Z.parent.gauche Z.parent.gauche = Y else Z.parent.droite = Y If couleur Y = Noir Couleur Y = Couleur Z AjusterSuppression(X) couleur Y = Couleur Z Liberer Z Else Liberer Y Retourner Valeur
24
Algorithme suppression (Suite)
AjusterSuppression(Z) Tant que couleur Z = Noir ET Z != racine if Z = Z.parent.droite W = Z.parent.gauche If Couleur W = Rouge Couleur W = Noir Couleur Z.parent = Rouge Rotation droite Z.parent If couleur W.droite ET W.gauche = Noir Couleur W = Rouge Z = Z.parent Else if Couleur W.gauche = Noir Couleur W.droite = Noir Rotation gauche W Couleur W = Couleur Z.parent Couleur Z.parent = Noir Couleur W.gauche = Noir Z = racine Rotation double droite gauche Couleur z = noir
25
Références Structures de données avancées avec la STL
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.