Vous êtes sur la page 1sur 13

Les arbres: Dfinition

Universit Mohammed V- Agdal


Ecole Mohammadia d'Ingnieurs
Dpartement Gnie Informatique

Un
U arbre
b estt compos
dun
d ensemble
bl de
d nuds,
d
dun ensemble darcs reliant les nuds, et dun nud
particulier appel racine de larbre.
Un arc (n1,n2) tablit une relation entre le nud n1,
appel nud parent, et n2, appel nud enfant de

Structures de Donnes

n1. Lensemble des arcs doit tre tel que chaque nud,
sauf la racine, a exactement un parent
Exemple:

La racine (Niveau 0)

niveau 1

niveau 2

Par: Mr N.EL FADDOULI


J

niveau 3

Anne Universitaire:2013/2014

EMI/ Structures de Donnes / N. El Faddouli

EMI/ Structures de Donnes / N. El Faddouli

74

Les arbres: Caractristiques

Les arbres: Caractristiques


On peut fixer un degr maximum pour un arbre pour

Trois types de nuds:

- Racine: le seul nud de larbre qui na pas de parent.


- Feuilles: les nuds qui nont pas denfants.

qu'il soit: unaire, binaire, ternaire...

La hauteur de larbre est le plus grand niveau

- Nuds internes: ni des feuilles ni la racine.

quon
qu
on

trouve

parmi

ses

nuds

(la

profondeur

maximale).
Chaque nud possde:
Si lordre entre les sous-arbres enfant est pris en

- un degr: le nombre de ses enfants.


- un niveau (profondeur): nombre darcs quil faut
remonter pour atteindre la racine.

compte, on parlera darbre ordonn.


Les oprations sur les arbres:
- Ajouter un lment.

quon
on
A chaque nud est aussi associ un lment qu
- Dterminer si un lment existe dans larbre.

appelle contenu du nud ou valeur du nud

- Supprimer un lment de larbre.


Le degr (larit) de larbre est le plus grand degr

-
Dans ce qui suit, on traitera les arbres binaires

quon trouve.

(degr=2). C'est le type le plus basique dont toutes les


oprations sont valables pour un arbre n-aire.
EMI/ Structures de Donnes / N. El Faddouli

75

EMI/ Structures de Donnes / N. El Faddouli

76

Les arbres binaires

Les arbres binaires


Dfinition TAD:

Dfinition:

Type arbre:

Un arbre binaire T est:


o Soit un arbre vide
o Soit un triplet (r,g,d) o:
r est la valeur de la racine de l'arbre
g est un sous
sous-arbre
arbre gauche
d est un sous-arbre droite.
les deux sous-arbres peuvent tre vides.

Utilise lment, boolen , entier


Oprations:

Exemple:
A

d
C

estvide
t id

: arbre
b

boolen
b l

arbrevide

arbre

racine

: arbre

lment

arbregauche : arbre

arbre

arbredroit

: arbre

arbre

hauteur

: arbre

entier

existeelement: arbre, lment boolen


D

Fin Type
I

Exercice:
- Dfinir la fonction existeelement de manire
rcursive en fonction de: estvide, racine, arbregauche
et arbredroite.

EMI/ Structures de Donnes / N. El Faddouli

77

EMI/ Structures de Donnes / N. El Faddouli

78

Les arbes binaires

Les arbres binaires

Implmentation chaine:

Boolen existeelement (arbre A, element e)


Dbut

Fin
Entier Hauteur( arbre A)
Dbut

typedef struct nud * arbre;


struct nud { int val;
struct nud { int val; arbre g, d; }
struct nud *g;
struct nud *d;
d; };

Fin
Entier NbNoeuds( arbre A) .....
Entier NbFeuilles( arbre A) .....
Entier NbFeuillesIn( arbre A) .....
EMI/ Structures de Donnes / N. El Faddouli

Crer un arbre vide:


79

arbre T = NULL;

EMI/ Structures de Donnes / N. El Faddouli

80

Les arbes binaires

Les arbes binaires

O ti
Oprations:

O ti
Oprations:

int EstVide(arbre);

int EstVide(arbre T) {

arbre FilsGauche (arbre);

arbre FilsDroit (arbre);

arbre FilsGauche (arbre T) {

int EstFeuille(arbre);

int EstNoeudInterne(arbre);

arbre FilsDroit (arbre T) {

int Hauteur(arbre);

int NbreNoeud(arbre);

int EstFeuille(arbre T) {

int NbreFeuille(arbre);

int nbreNoeudInterne(arbre);

int EstNoeudInterne(arbre T) {

}
EMI/ Structures de Donnes / N. El Faddouli

81

EMI/ Structures de Donnes / N. El Faddouli

82

Les arbes binaires

Les arbes binaires

Oprations:
P
Parcours
en profondeur:
f d

int Hauteur(arbre T) {

Prfixe, infixe, suffixe


Parcours prfixe:
Pour un arbre T:

}
int NbreNoeud(arbre) {

On traite la racine de l'arbre T (affichage, )


On passe ensuite aux sous-arbres gauche et
droit C
C'est
est un parcours RGD ou RDG.
RDG

Exemple: Affichage prfixe de l'arbre suivant:


5

int NbreFeuille(arbre) {
40

10

}
9

int nbreNoeudInterne(arbre) {

30

20

}
EMI/ Structures de Donnes / N. El Faddouli

83

5, 10, ..
EMI/ Structures de Donnes / N. El Faddouli

84

Les arbes binaires

Les arbes binaires


Parcours infixe:

Parcours prfixe:

Pour un arbre T:

void Parcours_Pref( arbre T)

On traite le sous-arbre gauche

On traite la racine de ll'arbre


arbre T (affichage,
(affichage ))
On passe ensuite au sous-arbre droit.
C'est un parcours GRD
Exemple: Affichage infixe de l'arbre suivant:
5

40

10

30

20

EMI/ Structures de Donnes / N. El Faddouli

85

EMI/ Structures de Donnes / N. El Faddouli

86

Les arbes binaires

Les arbes binaires


Parcours post-fixe:
post fixe:

Parcours infixe:

Pour un arbre T:

void Parcours_Inf( arbre T)

On traite le sous-arbre gauche

On passe ensuite au sous


sous-arbre
arbre droit.
droit
On traite la racine de l'arbre T (affichage, )
C'est un parcours GDR
Exemple: Affichage postfixe de l'arbre suivant:
5

40

10

}
9

30

20

EMI/ Structures de Donnes / N. El Faddouli

87

EMI/ Structures de Donnes / N. El Faddouli

88

Les arbes binaires

Les arbes binaires

Parcours post-fixe:

Cration d'un arbre:

void Parcours_Post( arbre T)

Un arbre vide est un pointeur contenant NULL.

Un arbre non vide est un pointeur sur la racine de


l' b (structure
l'arbre
( t t
contenant
t
t trois
t i champs:
h
valeur
l
d la
de
l
racine, sous-arbre gauche et sous-arbre droit)
La cration d'un arbre se fait partir d'une racine, un
sous-arbre g
gauche et un sous-arbre droit:
arbre CreerArbre( val_racine, fg, fd)
En langage C: arbre d'entiers
arbre CreerArbre (int v, arbre fg, arbre fd )
{ arbre a=(arbre) malloc( sizeof(*a) ) ;
a -> val = v;

a ->g =fg;

Exercice:
- Fonction qui calcule le nombre d'occurrences d'un

return a;
}

entier dans un arbre T.


EMI/ Structures de Donnes / N. El Faddouli

a ->d = fd;

89

EMI/ Structures de Donnes / N. El Faddouli

90

Les arbes binaires

Les arbes binaires de recherche

Ajouter un lment dans un arbre:


Les lments du sous-arbre
sous arbre gauche sont infrieurs

Ajouter ds que possible (rencontrer un fils vide)


Ajouter l'lment de faon garder un ordre entre les

ou gales la racine.
Les lments du sous-arbre droit sont suprieurs

lments de l'arbre.
Ajouter de faon avoir un arbre complet le plus
possible (un arbre complet = arbre binaire dont les

la racine.
Optimiser la recherches dans un arbre: parcourir

feuilles ont la mme profondeur).

seulement une branche

Ajout la rencontre d'un fils vide:

temps de recherche proportionnel la hauteur de


l'arbre.

void Ajouter( arbre *t, int v)


{

Exemple:

if (*t==NULL) *t = CreerArbre( v, NULL, NULL);

else if ( (*t)->g==NULL)
(*t)->g= CreerArbre( v, NULL, NULL);

40

else if ( (*t)->d==NULL)
*t) ->d=
>d CreerArbre(
C
A b ( v, NULL,
NULL NULL);
NULL)

30

50

else Ajouter (&((*t)->g), v) ;


20

}
EMI/ Structures de Donnes / N. El Faddouli

91

EMI/ Structures de Donnes / N. El Faddouli

92

10

Les arbes binaires de recherche

Les arbes binaires de recherche

Recherche d'un lment:

Ajouter un lment comme feuille l'arbre:

Boolen Recherche( arbre T,


T entier x)
{

void AjouterElt( arbre *T, int x)

Si Estvide(T) retourner faux

Sinon
Si Racine(T) = X retourner vrai
Sinon
Si Racine(T)>=x
retourner Recherche(Filsgauche(T), x)
Sinon
retourner Recherche(Filsdroit(T), x)
}

if ( *T
T ==NULL)
NULL) *T
T = CreerArbre(x,
CreerArbre(x NULL,
NULL NULL);
else if (x > (*T) -> val) AjouterElt(&((*T) ->d), x);
else AjouterElt(&((*T) ->g), x);
}
Exercice: Ecrire un programme principal qui fait appel
cette fonction. La saisie des lments de l'arbre se
fera par niveaux (niveau 0, niveau 1, )

int Recherche( arbre T, int x)


{

Exemple: la saisie des lments 14, 7, 16, 5, 8, 15, 17,


3, 6 permettra d'avoir l'arbre suivant:
14
16

7
5
3

}
EMI/ Structures de Donnes / N. El Faddouli

93

15

17

EMI/ Structures de Donnes / N. El Faddouli

94

11

Les arbes binaires de recherche

Les arbes binaires de recherche

Insrer un lment:
L'insertion de 13 modifiera la liste comme suit:

void InsererElt( arbre *T, int x)


{

14
16

13
15

Exercice: Modifier le programme principal de ll'exercice


exercice

17

prcdent pour faire appel la fonction InsererElt afin


d'insrer un nouvel lment.

L'insertion de 20 modifiera la liste comme suit:

Exemple: la saisie des lments 14, 7, 16, 5, 8, 15, 17,

20

3, 6 permettra d'avoir l'arbre suivant:

14

14
16

7
5
3

16

13

15

17

EMI/ Structures de Donnes / N. El Faddouli

15

3
95

17

8
6

EMI/ Structures de Donnes / N. El Faddouli

96

12

TP
Exercice 1:
1.Dfinir la structure Nud et le type Arbre (voir cours)
2.Dfinir

la

fonction

Arbre CreerArbre (int v, Arbre G, Arbre D) qui cre un


arbre de racine v et ayant les sous-arbres G et D.
qui
3.Ecrire la fonction void InsererElt(( arbre *T,, int X)) q
ajoute un nud X dans un arbre de recherche T.
4. Ecrire la fonction

void

Parcours_pref(Arbre T) pour

afficher l'arbre T en ordre prfix


5
5.

Ecrire un programme principal lire les valeurs d


d'un
un arbre
par niveau et les insre dans un arbre initialement vide
et affiche l'arbre cr.

Exemple: la saisie des lments 14, 7, 16, 5, 8, 15, 17, 3, 6


permettra
tt d'avoir:
d'
i

14
16

7
5
3

15

17

EMI/ Structures de Donnes / N. El Faddouli

97

13