Les arbres vert-noirs sont des arbres binaires colorés spéciaux (en particulier, ce sont des ABRs). Plus précisément,
un arbre vert-noir est un arbre binaire coloré tqui satisfait les trois conditions suivantes :
(a)test un arbre binaire de recherche.
(b)
Pour tout nœud
x
de
t
, si
g
est le sous-arbre gauche de
x
et
d
est son sous-arbre droit, alors
hn
(
g
) =
hn
(
d
)
(en d’autres termes, get dont la même hauteur noire).
(c) Tous les nœuds verts de tsont soit sa racine, soit le fils gauche d’un nœud noir.
Définitions des arbres verts-noirs
On donne un exemple dans la Figure 1ci-dessous (à l’inverse, l’arbre coloré de la Figure 1, n’est pas vert-noir)
7
4 9
268
Figure 2 – Un arbre vert-noir
Fonction 1
Test des propriétés d’un arbre vert-noir
Écrire une fonction
is_greenblack : ’a ctree −> bool
qui prend en entrée un arbre coloré et retourne
true
si
celui-ci est vert-noir et
false
sinon. Attention, la fonction devra tester les trois propriétés dans la définition (en
particulier, il faut tester si l’arbre pris en entrée est un ABR).
Remarque : Pour cette question et toutes les suivantes, vous avez le droit de réutiliser/modifier
des fonctions que vous avez codé lors des TP au cours du semestre.
Partie 2 : Insertion
On va maintenant se concentrer sur l’implémetation de l’insertion dans les arbres vert-noirs. Comme vu dans le DS,
la procédure est basée sur une notion intermédiaire : les arbres quasi-vert-noirs. Commençons par rappeler la définition.
De façon informelle, un arbre quasi-vert-noir est un arbre coloré qui a des propriétés moins fortes qu’un “vrai” arbre
vert-noir : il satisfait les deux premières conditions dans la définition des arbres vert-noirs, mais il peut contenir au plus
un nœud vert qui ne satisfait pas la troisième condition.
Un arbre quasi-vert-noir est un arbre binaire coloré tqui satisfait les trois conditions suivantes :
(a)test un arbre binaire de recherche.
(b)
Pour tout nœud
x
de
t
, si
g
est le sous-arbre gauche de
x
et
d
est son sous-arbre droit, alors
hn
(
g
) =
hn
(
d
)
(en d’autres termes, get dont la même hauteur noire).
(c) Il existe au plus un nœud vert de tqui n’est ni la racine, ni le fils gauche d’un nœud noir.
Définitions des arbres quasi-verts-noirs
Fonction 2
Test des propriétés d’un arbre quasi-vert-noir
Écrire une fonction
is_quasigreenblack : ’a ctree −> bool
qui prend en entrée un arbre coloré et retourne
true si celui-ci est quasi-vert-noir et false sinon.