Professional Documents
Culture Documents
Parcours d'arbres
1
2
4
8
3
5
10
Prfixe : 1, 2, 4, 8, 9, 5, 10, 3, 6, 7
(VGD)
Infixe : 8, 4, 9, 2, 10, 5, 1, 6, 3, 7
(GVD)
Suffixe : 8, 9, 4, 10, 5, 2, 6, 7, 3, 1
(GDV)
X, Petite classe 75
X, Petite classe 75
void ParcoursInfixe(Arbre a)
{
if (a != NULL )
{
ParcoursInfixe(a->filsG);
printf("%3d", a->contenu);
ParcoursInfixe(a->filsD);
}
}
void ParcoursSuffixe(Arbre a)
{
if (a != NULL )
{
ParcoursSuffixe(a->filsG);
ParcoursSuffixe(a->filsD);
printf("%3d", a->contenu);
}
}
X, Petite classe 75
Arbres de recherche
15
19
12
14
10
13
16
21
17
X, Petite classe 75
Exercices
(1) Montrer que le parcours infixe
ordonne les nuds par valeur
croissante.
(2) Montrer que si un nud a
deux fils, son successeur dans
l'ordre infixe n'a pas de fils
gauche et son prdcesseur n'a
pas de fils droit.
(3) Montrer que le successeur du
nud n est le sommet le plus
gauche dans le sous-arbre droit
issu de n.
X, Petite classe 75
Recherche
Arbre Recherche(Element v, Arbre a)
{
if (a == NULL || v == a->contenu)
return a;
if (v < a->contenu)
return Recherche(v, a->filsG);
return Recherche(v, a->filsD);
}
X, Petite classe 75
if (a == NULL )
a = NouvelArbre(v, NULL , NULL );
else if (v <= a->contenu)
AjouterArbre(v, &a->filsG);
else
AjouterArbre(v, &a->filsD);
*ap = a;
X, Petite classe 75
Suppression
(a) le noeud est une feuille : on le
supprime
15
15
14
10
16
21
14
16
10
17
13
19
12
19
12
21
17
15
14
10
13
16
21
17
19
12
19
12
13
10
16
21
17
X, Petite classe 75
15
19
12
14
10
16
21
17
13
19
12
14
10
13
16
19
12
14
10
13
17
21
16
21
17
if (a == NULL)
*ap = a;
else if (v < a->contenu)
SupprimerArbre(v, &a->filsG);
else if (v > a->contenu)
SupprimerArbre(v, &a->filsD);
else if (a->filsG == NULL )
*ap = a->filsD;
else if (a->filsD == NULL )
*ap = a->filsG;
else (*ap)->contenu =
SupprimerSuccesseur(&a);
if (a->filsG == NULL )
{
v = a->contenu;
a = NULL ;
return v;
}
return SupprimerSuccesseur(&(a->filsG));
X, Petite classe 75
Temps de calcul
O(log n) si l'arbre est quilibr
O(n) si l'arbre est filiforme
--> D'o l'intrt des arbres
quilibrs!
Arbre AVL (Adel'son-Vel'skii et
Landis) : pour tout noeud, la
diffrence de hauteur entre les
sous-arbres gauche et droit est
gale -1, 0 ou 1.
Exemple : les tas
Hauteur d'un arbre AVL : O(log n)
X, Petite classe 75
X, Petite classe 75
Hauteur 1 :
Hauteur 2 :
X, Petite classe 75
h-2
h-1
1 - 5 h+3
( 2 ) ]
X, Petite classe 75
Rotation simple
x
h-1
h-2
h-2
uxv
u
x
h-1
h-2
X, Petite classe 75
Double rotation
h-2
h-2
h-2
uvxw
v
h-2
X, Petite classe 75
Partitions
Donnes : une partition de
l'ensemble {1, ..., K}
Trouver la classe d'un lment
Faire l'union de deux classes.
Une premire solution :
Reprsenter la partition par un
tableau classe tel que classe[i]
soit la classe de l'lment i.
Trouver : O(1)
Union : O(n)
X, Petite classe 75
11
10
X, Petite classe 75
Union pondre
Rgle : Lors de l'union, la racine
de l'arbre le moins haut devient
fils de la racine de l'arbre le plus
haut.
6
11
10
X, Petite classe 75
(b) suivre
X, Petite classe 75
x
y
Preuve (suite).
(b) Si hi(x) > 0, soit y un fils de x. On a
hi(y) = hi(x) - 1. Si y est devenu un fils
de x lors de la j-ime union (j i), on a
tj-1(x) tj-1(y), d'o tj(y) = tj-1(y) et
tj(x) 2tj(y). Ensuite, la taille de y ne
varie plus, mais celle de x peut crotre.
De mme, la hauteur de y ne varie
plus, donc hi(y) = hj-1(y). Par hypothse
de rcurrence, tj-1(y) 2 hj-1(y), donc
tj(y) = tj-1(y) 2 hj-1(y) = 2 hi(y) et
X, Petite classe 75
X, Petite classe 75
1
9
10
10