UTBM 21 juin 2004
lo42 - Final P2004 - page1/1
Final – LO42
Les documents de cours, TD et TP sont autorisés. Le barème est indicatif.
Le soin donné à la rédaction sera évalué. Toute réponse devra être claire et justifiée (toute ambiguïté sera
mal interprétée). L’élégance de la solution sera jugée.
Sauf indication contraire, dans le cas d’algorithmes les réponses doivent être rédigées en pseudo code.
Une question subsidiaire ne peut être traitée qu’une fois les autres questions traitées « correctement ».
1 Les arbres rouge et noir
Un arbre rouge et noir est un arbre binaire de recherche dont chaque nœud contient une information
supplémentaire, sa couleur, qui peut valoir soit rouge soit noir. En contrôlant la manière dont les nœuds sont
colorés sur n’importe quel chemin allant de la racine à une feuille, les arbres rouge et noir garantissent qu’aucun
de ces chemins n’est plus de deux fois plus long que n’importe quel autre, ce qui rend l’arbre approximativement
équilibré. Nous représenterons les arbres rouge et noir grâce aux types suivants :
Type couleur = (Rouge, Noir) ;
Btree = ^Bnoeud ;
Bnoeud = Structure Début
val : Ninfo ;
col : couleur ;
pere, fg, fd : Btree ;
Fin ;
Un objet de type Btree représente un arbre binaire dont les nœuds sont colorés en rouge ou en noir et portent des
étiquettes de type Ninfo. On supposera que l’on dispose d’une relation d’ordre sur ces éléments. Un tel arbre est
dit de recherche si et seulement si pour tout nœud étiqueté par l’élément x, tous les éléments présents dans le
sous-arbre gauche sont inférieurs à x et tous ceux du sous-arbre droit sont supérieurs à x. Un arbre binaire de
recherche est un arbre rouge et noir s’il satisfait les deux propriétés suivantes :
(1) Si un nœud est rouge alors ses fils sont noirs.
(2) Chaque chemin simple issu d’un nœud à un descendant "vide" contient le même nombre de nœuds
noirs.
Voici un exemple d’arbre rouge et noir :
(Les nœuds rouges sont représentés grisés).
Question 1 (2) Ecrivez une fonction arbre_successeur qui retourne le nœud possédant la plus petite étiquette
supérieure à celle du nœud reçu en paramètre, ou nul. 7 est le successeur de 5, 13 est le successeur de 7.
On suppose que nous disposons de la fonction "arbre_min(r :Btree) : Btree".
fonction
arbre_successeur
(r : Btree) : Btree ;
Nous allons maintenant écrire quelques fonctions permettant de vérifier qu’un objet de type Btree vérifie bien les
propriétés d’un arbre rouge et noir.
Question 2 (2) Ecrivez une fonction controle qui vérifie qu’un objet de type Btree vérifie la propriété (1), i.e.
que tout fils d’un nœud rouge est noir.
fonction controle(r : Btree) : booléen ;
La hauteur noire hn(t) d’un arbre rouge et noir t est le nombre de nœuds noirs, présents dans un chemin
quelconque descendant de sa racine à n’importe quelle feuille
13
17
5
14 19
7 3
4 1