Vous êtes sur la page 1sur 8

Licence 2 Informatique

12 / 2014

TD5: Arbres Binaires Equilibrs - Corrig


Arbres AVL
Exercice 1 Il y en a 6
3

1
5

4
2

2
5

5
2

2
5

5
3

Exercice 2 Les noeuds 25 et 42 ne respectent pas la propriete. Dans ce cas on peut faire une rotation gauche soit en 25 soit en 42 pour retablir lequilibre. Par exemple rotation en 42 :
42
25
12

54
63

Exercice 3 Comme on nins`ere quune feuille, la hauteur ne peut changer que pour les ancetre de cette
feuille ! Par consequent, les nuds desequilibres se trouvent tous sur le chemin allant de la nouvelle feuille
`a la racine. C
a en fait O(log(n)).
On remarque que le desequilibre (difference de hauteur) ne peut etre que de 2 (desequilibre),1 ou 0
(equilibres).
Exercice 4 Lalgorithme (page suivante) consiste `a tester, pour chaque noeud, si la difference entre les
hauteurs de chacun des deux fils est au plus 1. Cest une fonction recursive qui renvoie une valeur :
-1 si le sous-arbre est desequilibre (pas ABR)
la hauteur ( 0) du sous-abre si cest un ABR
Pour analyser la complexite, on remarque que lalgorithme sappelle recursivement exactement une fois
sur chaque nud. cest un parcours darbre classique, en O(n).

TestABR (N : Nud) : entier


d
ebut
si est-vide(N) alors
retourner 1
fin
g = TestABR(G(N))
d = TestABR (D(N))
si g = 1 ou d = 1 ou [g d| > 1 alors
retourner -1
fin
retourner 1+max(g,d)
fin

Exercice 5 On ne reprsente pas ici toutes les tapes. Linsertion se fait comme dans un ABR. Ensuite
il y'a ventuellement quelque chose faire si larbre nest plus un AVL.
25
60
35

Desequilibre `
a droite (-2) en 25. Comme au noeud 60 le desequilibre est `a gauche (+1), il faut faire
une double rotation : `a droite en 60 puis `a gauche en 25.

35
25

35
25

60

60

10
5

desequilibre gauche-gauche en 25. On fait une rotation a` droite.


35

35

10
5

60

10

25

60

25
20

Desequilibre en 35. Double rotation : gauche en 10 puis droite en 35


25

25
10
5

35
20

10
60

35
20

60
65

Desequilibre en 35. Rotation gauche


25

25

10
5

60
20

35

10
65

60
20

35

65
45

70

40

Desequilibre en 35 (en 25 aussi, mais on commence par remonter depuis le noeud que lon a ajoute).
Double rotation

25

25

10

60

20

10

40
35

65
45

60

20

70

40
35

65
45

70

50

Desequilibre en 25. Double rotation.


40

40
25
10
5

25

60
45

35
20

65
50

60

10
70

35

45

20

65
50

70

55

desequilibre en 45. Rotation gauche


40

40

25

60

10
5

35
20

50
45

25
65

55

60

10
70

35
20

30

50
45

65
55

70

15

Le predecesseur de 25, 20, na quun fils. On remplace 25 par 20 et cela ne desequilibre pas larbre !
40
20

60

10
5

35
15

30

50
45

65
55

70

La suppression de 30 est sans probl`eme. Celle de 35 (feuille maintenant) desequilibre son p`ere 20. Roration
10-20.

45

45

20
10
5

60
50

15

10
65

55

5
70

60
20

15

50

65
55

70

Exercice 7 Une facon simple et rapide est de refaire larbre de zero ! En effet on peut facilement
construire un ABR equilibre depuis un tableau trie. Une premi`ere etape consiste donc `a faire un parcours
infixe de lABR de depart pour obtenir le tableau T de ses elements, trie par ordre croissant. Cela se fait
en O(n).
Ensuite nous allons faire du diviser pour regner pour construire lAVL : on ins`ere le median `a la racine
et on repart `a gauche et `a droite. Il ny aura alors jamais de reequilibrages `a faire.
` chaque appel,
Cela donne lalgorithme suivant, recursif (initialement sur un arbre reduit a` une feuille). A
soit on place une valeur dans un nud (ce qui arrive n fois) soit on ne fait rien (ce qui arrive au pire
deux fois plus que le nombre dappels recursifs) donc une complexite totale de O(n).
Notez que tous les nuds ont un equilibre de 0, sauf ceux sur le chemin allant du dernier nud insere `a
la racine qui peuvent avoir +1 ou -1 comme desequilibre.

e(N : Nud, T : tableau dentiers, g, d :entiers)


Construit ABR Equilibr
d
ebut
si g d // NB : rien a
` faire si g > d : arbre vide alors
m = (g+d)/2 // NB : element mediant de [g..d]
val(N) = T[m]
G(N) = ArbreVide( )

Construit ABR Equilibr


e(G(N ),T , g, m 1)
D(N) = ArbreVide( )

Construit ABR Equilibr


e(D(N ),T , m + 1, d)
fin
fin

Les arbres rouge noir

Correction de lexercice 1.
Aucun nest un rouge noir.
Un arbre rouge noir est un arbre binaire de recherche comportant un champ suppplmentaire
par nud : sa couleur, qui peut valoir soit ROUGE, soir NOIR.
En outre, un arbre rouge noir satisfait les proprits suivantes :
1. Chaque nud est soit rouge, soit noir.
2. Chaque feuille est noire.
3. Si un nud est rouge, alors ses deux fils sont noirs.
4. Pour chaque nud de larbre, tous les chemins descendants vers des feuilles contiennent
le mme nombre de nuds noirs.
5. La racine est noire.
Le premier arbre (a) na pas sa racine noir.
Dans le deuxime (b) le chemin vers la troisime feuille contient un seul nuds noir feuille
exclue, tandis quun chemin vers la premire en contient 2 feuille exclue.
Le troisime arbre (c) est trs joli avec de belles couleurs mais ce nest pas un ABR donc
pas un rouge noir (oui je sais cest vache).
Le quatrime (d) a un nud rouge dont un fils est rouge.

Correction de lexercice 2.
Oui.
30
15

40

10
N

25
20

N
N

50

N
N

Figure 3: Coloriage corrig

Tas

Exercice 1 [Exemples de tas]


Question 1. Les arbres 3, 6 et 7.
Question 2.
9
7

9
4

9
1

Question 3.
16

16

14

10

8
2

7
4

14

10

11

11
4

Question 4.
16

16

1
8
2

10
7

16

1
2

10
7

8
3

2
1

10
7

Exercice 2 [Proprits classiques des tas]


Question 1. Un tas est un arbre complet donc un tas de hauteur h ne peut avoir des emplacements
vides que sur la profondeur h. Do 2h n 2h+1 1.
h
Question 2. On dduit de lingalit prcdente : n+1
2 2 n, puis log(n + 1) 1 h log(n). De
lingalit de gauche, dcoule h log(n) + log( n+1
)

1
>
log(n)
1. h tant entier, h = blog(n)c.
n

Question 3. Soit B un sous-arbre dun tas et c la valeur de sa clef. Supposons quil existe un nud
dont la valeur v est strictement plus grande que c. Soit v0 = c, . . . , vp = n les valeurs des clefs des nuds
en suivant la branche reliant ces deux nuds. Par dfinition des tas, on a i {0, . . . , p 1}, vi vi+1 ,
ce qui contredit laffirmation prcdente.
1

Question 4. Si lon considre une branche entre la racine r et une feuille f , il dcoule de la dfinition
des tas et du fait que les clefs sont toutes distinctes que clef (r) > clef (f ). Donc le plus petit lment est
dans une feuille du tas.
Rciproquement, il est clair que nimporte quelle feuille peut contenir le plus petit lment du tas.

Exercice 4 [Reprsentation des tas en tableaux]


Question 1. Les fils du nud i sont les nuds 2i + 1 (fils gauche) et 2i + 2 (fils droit).
Le pre du nud i est le nud b i1
2 c.
Question 2. Oui :
23
17

14

6
1

13
5

10

12

Question 3.
i {1, . . . , n 1}, T [i] T [b

i1
c]
2

Question 4. Montrons cela par rcurrence sur n.


Cas n = 1 : vident.
Supposons la proprit vraie jusquau rang n. Soit un tas de taille n + 1 reprsent sous forme de tableau.
Considrons un tas de taille n. Deux cas se prsentent : n = 2k ou n = 2k + 1.
Dans le second cas, linsertion dune feuille se fera comme fils gauche du nud dindice b n2 c + 1 et la
2k+2
n+1
premire feuille du nouvel arbre sera celle dindice b n2 c + 2 = k + 2 = 2k+2
2 + 1 = b 2 c + 1 = b 2 c + 1.
n
Dans le premier cas, linsertion dune feuille se fera comme fils droit du nud dindice b 2 c et la premire
2k+1
n+1
feuille du nouvel arbre restera celle dindice b n2 c + 1 = b 2k
2 c + 1 = b 2 c + 1 = b 2 c + 1.
De plus dans les deux cas, la dernire feuile est videmment celle dindice n + 1.

Vous aimerez peut-être aussi