1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de...

54
1 LES ARBRES rbre est une structure homogène dont chaque élément lé noeud, contient de l'information et plusieurs li nteurs) vers des éléments du même type. e manière plus formelle, on peut dire qu'un arbre d se T est : soit la structure vide soit un noeud de type T (racine) auquel est associé u nombre fini de sous-arbres disjoints (descendants) Les arbres sont dits structures récursives non- linéaires

Transcript of 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de...

Page 1: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

1

LES ARBRESUn arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments du même type.

D'une manière plus formelle, on peut dire qu'un arbre de type de base T est :

soit la structure vide soit un noeud de type T (racine) auquel est associé un

nombre fini de sous-arbres disjoints (descendants).

Les arbres sont dits structures récursives non-linéaires 

Page 2: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

2

LES ARBRES

Définitions

Un arbre orienté (appelé parfois arbre enraciné) est un graphe acyclique orienté qui vérifie les conditions suivantes:

Il existe exactement un noeud qui n'a pas de ‘ prédécesseur ’.

Ce noeud s'appelle la racine et l'ordre d'entrée de la racine est 0.Tous les noeuds, sauf la racine, n'ont qu'un ‘ prédécesseur ’ et ils

ont tous un ordre d'entrée égal à 1.Il existe un chemin unique de la racine à chaque noeud.

Page 3: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

3

LES ARBRES NOMENCLATURE

Le niveau d'un noeud est le nombre d'arcs qu'il faut parcourir pour arriver à ce noeud. La racine est de niveau 1.

La profondeur d'un arbre (ou hauteur) est le nombre

maximum d'arcs qu'il faut parcourir pour aller de la racine

à une feuille.

Les noeuds terminaux (qui n'ont pas de descendants)

sont appelés feuilles. Les noeuds non-terminaux sont appelés

noeuds intérieurs.

Un noeud Y, situé immédiatement sous un noeud X,

est appelé le descendant ou fils (direct) de X. Inversement, X est

appelé l'ancêtre ou père (direct) de Y.

Page 4: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

4

LES ARBRESNiveaux

5

4

3

2

1

0

A

W

TS U

Y Z

X

M

B

V

R

N

O P Q

R A B T U Q

Profondeur 0 2 2 3 3 2Hauteur 5 3 1 2 1 0

Page 5: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

5

LES ARBRES

Le nombre de sous-arbres associés à un noeud (nombre de descendants directs) est appelé le degré du noeud. Le degré d'un arbre correspond au degré le plus élevé de ses noeuds. Une chaîne (liste linéaire) est un arbre de degré 1.

Le chemin d'un noeud est la suite d'arcs qui mènent de

la racine à ce noeud. La longueur du chemin d'un noeud est donc

égale à la profondeur de ce noeud.

Un arbre est dit équilibré si, à chaque niveau, la profondeur

des différents sous-arbres ne varie pas de plus d'un niveau.

Page 6: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

6

LES ARBRES

Un arbre ordonné est un arbre où la position respective

des sous-arbres reflète une relation d'ordre.

Un arbre de degré 2 est appelé arbre binaire.

Un arbre de degré supérieur à 2 est appelé arbre multiple.

Page 7: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

7

Ainsi, un arbre binaire est un arbre orienté qui vérifie les conditions suivantes :

Chaque fils d'un noeud est soit fils gauche, soit fils droit.Aucun noeud n'a plus de deux fils.

Une forêt est un ensemble d'arbres.

LES ARBRES

Page 8: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

8

LES ARBRESPropriétés

Le nombre maximum de noeuds qu'un arbre de profondeur "p" et de degré "d" peut contenir, si tous les noeuds internes ont "d" descendants, est :

à la racine (niveau 1), on a d 0 =1 nœud , au niveau 2, on a d 1 noeuds, au niveau p, on a d p-1 noeuds,

En particulier, pour un arbre binaire, on a:

1p

0i

id d(p)N

12d(p)N p1p

0i

id

Page 9: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

9

LES ARBRESPropriétés

La longueur maximale d'un chemin est la hauteur de l'arbre.

Pour un arbre binaire avec n noeuds, étant donné que le nombre maximum de feuilles est (n + 1) / 2, la longueur maximale d'un chemin est log2[(n + 1) / 2)].

La recherche d'un noeud dans un arbre est beaucoup plus efficace que la recherche linéaire dans une liste, où le chemin maximal est n.

Page 10: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

10

LES ARBRES

La représentation des arbres en mémoire

En ce qui concerne la représentation en mémoire des arbres, nous verrons d'abord celle des arbres binaires. Cela peut se faire avec l'allocation statique d'espace (tableaux) ou avec uneallocation dynamique (chaînage).

Page 11: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

11

LES ARBRES

Représentation d'arbres à l'aide de tableaux

Il y a deux techniques que l'on peut utiliser dans ce cas pour simuler un arbre :

La première prévoit non seulement l'allocation statique de la mémoire mais aussi l'allocation statique des noeuds de l'arbre dans la matrice.

Page 12: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

12

LES ARBRES

Représentation d'arbres à l'aide de tableaux

Pour ce faire, on identifie chaque noeud de l'arbre : La racine a comme identificateur 1 Un fils gauche a comme identificateur 2D Un fils droit a comme identificateur 2D + 1

où D est l'identificateur du père.

Page 13: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

13

LES ARBRES

Représentation d'arbres à l'aide de tableaux

32

28

23

18 31 33

17

7

2 13

1 5 8

1

2 3

4 5 6 7

8 9 10 12 14 15

17 7 28 2 13 23 32 1 5 8 18 31 33

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Exemple d'un arbre réalisé par une matrice.

Page 14: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

14

LES ARBRES

Représentation d'arbres à l'aide de tableaux

les noeuds qui manquent sont signalés par un trou dans le tableau de l'espace perdu!

Dans le cas où il n'y a pas beaucoup de trous, ce problème a peu d'importance mais si le nombre de trous est élevé, on peut chercher un moyen de structurer l'arbre autrement….

Page 15: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

15

LES ARBRESReprésentation d'arbres à l'aide de tableaux

La deuxième technique: on retient encore une matrice mais au lieu de fixer la position de chaque nœud dans la matrice, on attribue les positions au fur et à mesure que les noeuds sont créés.Chaque noeud a besoin de trois champs :

un champ pour la donnée même; un champ qui vise le fils gauche; un champ qui vise le fils droit.

S'il n'y a pas de fils, ces champs contiendront 0 (ou -1!); autrement, on y mettra l'indice de la position de la matrice qui contient le fils en question.

Page 16: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

16

Illustration

8 3 11 2 4 10 12 1 6 9 141 2 3 4 5 6 7 8 9 10 11 12 13 14 15

8 3 11 2 4 10 12 1 6 9 14

2 4 6 8 0 10 0 0 0

3 5 7 0 9 0 11 0 0

0

0

0

0

élément d’informationindice du sous-arbre de gaucheindice du sous-arbre de droite

Représentation d'arbres à l'aide de tableaux

LES ARBRES

Page 17: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

17

LES ARBRES

Représentation d'arbres à l'aide de tableaux

Cette réalisation comporte deux inconvénients 

D'abord, les noeuds sont plus grands que ceux

de la matrice à positions fixes.

Ensuite, il faut contrôler la position des champs libres.

Comme la matrice a un nombre fixe d'éléments,

on peut en former deux structures : l'arbre même

et une liste des noeuds libres.

Page 18: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

18

99

Arbre binaire complet

1

• indice du premier élément du niveau k?

• nombre de feuilles?

• nombre de nœuds internes?

• nombre de nœuds?

• hauteur?

• feuilles à gauche!

2 3

4 5 6 7

8 9 11 12 14 1510 13

LES ARBRES

Page 19: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

19

LES ARBRES

Représentation d'arbres à l'aide de tableaux

Exemple d’un modèle d’implantation…particulier #define un_type ...

#define TAILEMAX ... typedef struct Element {

un_type Info;struct Element *Gauche, *Droit;

}elem;

typedef{ int nb;elem tab [TAILEMAX];elem * Racine ;} arbre;

Page 20: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

20

LES ARBRES

Représentation avec allocation dynamique

Z 10 20

(1)

(10) (20)

(15) (25) (30) (40)

(35) (55) (50) (70)(60)

B 15 25 K 30 40

E 35 Q 55 A 50 P 60 70

L F S M V

Exemple d'un arbre réalisé par chaînage.

Simulation d ’une adresse mémoire

Page 21: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

21

LES ARBRES BINAIRES ORDONNÉES

Parmi les différentes structures d'arbres possibles, une des plus intéressantes à utiliser est la structure d'arbre binaire ordonné (arbre de tri, arbre syntaxique, arbre généalogique...). Exemple d’implantation

typedef int Info_type; typedef struct Noeud { InfoType Info; struct Noeud *Gauche,* Droite; }noeud; typedef struct

{noeud* racine;} arbre;

Page 22: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

22

LES ARBRESReprésentation avec allocation dynamique

Lors de la création d'un noeud, on obtient l'espace nécessaire du système d'exploitation, lequel nous fournit en même temps l'adresse du noeud. On remplit le champ donnée de l'information voulue et on met l'adresse du noeud dans le champ du pointeur approprié (gauche ou droit) du père.

S'il s'agit d'ajouter une nouvelle feuille, ceci n'est pas compliquée. Mais quand il s'agit d'un noeud à l'intérieur de l'arbre, il faut suivre attentivement l'attribution de la valeur aux pointeurs.

Page 23: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

23

LES ARBRESReprésentation avec allocation dynamique

Cette structure nous intéresse particulièrement, car les arbres binaires se donnent très bien à l'emmagasinage des informations ordonnées.

On a déjà mentionné comment on peut visiter chaque noeud dans un arbre. On va considérer un arbre arrangé de telle façon que le contenu du fils gauche soit plus petit que celui du père et le contenu du fils droit soit plus grand que celui du père.

On aura donc un arbre binaire orienté et, ce qui est mieux, un arbre binaire ordonné. Il faut noter que la visite de cet

arbre en ordre symétrique fournit une liste ordonnée.

Page 24: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

24

LES ARBRES BINAIRES ORDONNÉES

Description en terme de type abstrait

le rôle d'une structure d'arbre binaire ordonné est de

stocker des informations en conservant, en plus, une hiérarchie

entre ces informations. Cette hiérarchie reflète des liens de

dépendance entre les données. Il peut y avoir au plus deux types

de liens différents (lien gauche et lien droite). la déclaration d'un arbre binaire ordonné doit spécifier le

type de bases des éléments qu'il contiendra.

Page 25: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

25

LES ARBRES BINAIRES ORDONNÉES

Primitives de manipulation:

1. initialiser un arbre à vide.

2. définir la racine d'un arbre vide.

3. regrouper un élément (racine) et deux sous-arbres

(un des sous-arbres peut être vide)

4. ajouter un élément (éventuellement tout un sous-arbre)

à gauche (ou à droite) d'un élément ne possédant pas de

descendant gauche (ou droit, respectivement).

5. indiquer si l'arbre est vide.

6. indiquer l'absence éventuelle de descendant gauche

(ou droit) pour un élément auquel on a accès.

Page 26: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

26

LES ARBRES BINAIRES ORDONNÉES

7. accéder à la racine de l'arbre.

8. accéder à la racine du sous-arbre gauche (ou droit) d'un

élément auquel on a accès.

9. décomposer un arbre en un élément (ancienne racine) et

un ou deux sous-arbres (suivant que la racine avait un ou

deux descendants).

10. détruire un (sous-)arbre (l'arbre peut n'être composé que

d'un seul élément).

11. remplacer un sous-arbre par un autre sous-arbre.

12. Etc…(voir exercices…)

Page 27: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

27

LES ARBRES BINAIRES ORDONNÉES

Exemple: Arbres syntaxiques

Un arbre syntaxique est une structure chargée de refléter la précédence existant entre les différents opérateurs et symboles d'un langage dans des expressions

Ils sont utilisés pour représenter des expressions algébriques.

Dans ce cas, chaque noeud intérieur contient un opérateur et les feuilles contiennent les opérandes.

Page 28: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

28

LES ARBRES BINAIRES ORDONNÉES

Exemple Arbres syntaxiques(a+b)*c-d/e

Arbre syntaxique d'une expression arithmétique

Page 29: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

29

LES ARBRES BINAIRES ORDONNÉES

W

U V

X Y

Z

0

0

1

1

1

1

1

0

0

0

Le code Huffman affecte à chaque feuille la séquence de bits de la racine à la feuille considérée. Exemple :U : 00 V : 01 W : 100 X : 1010 Y : 1011 Z : 11Ce code possède la priorité “ préfixée ”,c'est-à-dire que le code relatif à un item quelconque n'est pas le segment initial d'un quelconque autre item.

Page 30: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

30

LES ARBRES BINAIRES ORDONNÉES

Exemple Arbres de tri

Un arbre de tri est une structure chargée de refléter une relation d'ordre existant entre différentes informations. Ces informations doivent comporter un champ (clé de tri) sur lequel on puisse appliquer une fonction permettant de savoir si un élément doit être avant ou après un autre.

La plupart du temps, ce champ sera de type numérique ou alphabétique sur lequel on pourra utiliser les opérateurs de comparaison:<, > ou =.

Page 31: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

31

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri

Un arbre de tri reflète un séquencement (linéaire) des éléments qu'il contient.

Le même ensemble de valeurs peut donc être représenté par différentes configurations d'arbres binaires suivant l'ordre selon lequel les valeurs auront été traitées.

Il est possible de mémoriser une liste ordonnée à l'aide d'un arbre binaire.

Page 32: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

32

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées Implantation

#define lien struct s_noeud*typedef struct s_noeud

{ char *nom;lien fils1;lien fils2;

}type_noeud;

typedef struct{ type_noeud * racine}arbre;

Page 33: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

33

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées

lien cree_feuille(char* nouv_nom){ lien x; int taille;x = (lien) malloc (sizeof(type_noeud));taille = strlen(nouv_nom)+1; /* compter le \0 */x->nom = (char*) malloc (taille);strcpy(x->nom, nouv_nom);x->fils1 = NULL;x->fils2 = NULL;return(x);}

Page 34: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

34

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées

Si vous créez progressivement l'arbre, vous pourrez voir que toute nouvelle valeur trouve toujours sa place, les feuilles se transformant petit à petit en noeuds, au fur et à mesure de l'augmentation de la taille de l'arbre.

Page 35: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

35

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées

arbre init_a(void){ arbre R; R.racine= NULL; return R;}

Quelques opérateurs utiles

arbre cree_racine_a(arbre R, char* nouv_nom){ R.racine= cree_feuille(nouv_nom); return R;}

Page 36: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

36

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées, insertion non récursive..

void insert_a(arbre R, char* nouv_nom){ lien x; x= cree_feuille(nouv_nom);

while(R.racine != NULL){ if(strcmp(x->nom, R.racine->nom) < 0)

if(R.racine->fils1 == NULL){ R.racine->fils1 = x; return;}

else R.racine = R.racine->fils1; else if(R.racine->fils2 == NULL)

{R.racine->fils2 = x; return; } else R.racine = racine->fils2;}

}

Page 37: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

37

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées

arbre insere_a (char un_nom[], arbre p){

INSERER(un_nom, &p.racine);return p;

}

Page 38: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

38

void INSERER (char un_nom [ ], lien* racine){

if(*racine == NULL){

*racine = (lien)malloc(sizeof(type_noeud));strcpy ((*racine)->nom,un_nom);(*racine)->droite = NULL;(*racine)->gauche = NULL;

}else

if (strcmp(un_nom,(*racine)->nom) < 0)INSERER (un_nom,&(*racine)->fils1);else INSERER (un_nom,&(*racine)->fils2);

}

Page 39: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

39

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées

arbre saisie(void){arbre R; char txt[100]; R=init_a();do { printf("entrez un nom,@ pour finir:");

gets(txt);if(strcmp(txt, "@"))

if(R.racine == NULL) R= cree_racine_a(R,txt);else insert_a(R,txt);

} while(strcmp(txt, "@"));return R;}

Page 40: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

40

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées

On remarque l'efficacité de cette méthode : aucun déplacement d'élément, le tri se fait par insertion, mais avec recherche optimisée. Parcours facile des données sans coût trop important en mémoire (avec deux liens on obtient une structure bidimensionnelle, alors qu'avec une liste à chaînage avant et arrière on garde une structure unidimensionnelle, bien que bidirectionnelle).

Une fois l'arbre créé, on peut afficher la liste triée par ordre alphabétique par un simple parcours infixé (arbr_nom):

Page 41: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

41

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées

void affiche(lien racine)

{ if(racine != NULL)

{affiche(racine->fils1);

printf("%s, ", racine->nom);

affiche(racine->fils2);

}

}

Page 42: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

42

LES ARBRES BINAIRES ORDONNÉES

Arbres de tri Listes triées

Par contre l'arbre binaire nécessite d'être équilibré pour profiter pleinement de ces avantages.

Un arbre équilibré est un arbre organisé de telle manière à ce que sa profondeur soit minimale.

À l'extrême, en cas d'introduction d'une liste de noms déjà triée, tous les fils1 pointeront sur NULL alors que les fils2 pointeront sur le suivant, on se retrouve avec une liste chaînée simple.

Page 43: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

43

LES ARBRES BINAIRES ORDONNÉES

Arbres binaires de recherche

Un arbre binaire de tri est également dit de recherche. Dans le cas général, la recherche d'un élément dans un arbre binaire de recherche reste linéaire dans le pire des cas et logarithmique en moyenne.

On peut rendre cette recherche logarithmique dans le pire des cas en utilisant les arbres équilibrés et leurs variantes.

Page 44: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

44

LES ARBRES BINAIRES ORDONNÉES

Arbres équilibrés

On dit aussi arbres AVL (du nom de leurs inventeurs Adel'son - Vel'skii Landis en 1962).

Un arbre binaire est dit équilibré lorsque la différence entre les hauteurs des fils gauche et droit de tout noeud ne peut excéder 1.

Page 45: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

45

LES ARBRES BINAIRES ORDONNÉES

La visite arborescente

On parcourt généralement un arbre pour appliquer un traitement à chacun de ses noeuds. On distingue plus particulièrement trois méthodes de parcours d'arbres binaires...

Page 46: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

46

LES ARBRES BINAIRES ORDONNÉES

La visite arborescente

En pré-ordre : on traite la racine puis le sous-arbre gauche et enfin le sous-arbre droit.

Page 47: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

47

LES ARBRES BINAIRES ORDONNÉES

La visite arborescente

En ordre : on traite le sous-arbre gauche puis la racine et enfin le sous-arbre droit.

Page 48: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

48

LES ARBRES BINAIRES ORDONNÉES

La visite arborescente

En post-ordre : on traite le sous-arbre gauche puis le sous-arbre droit et enfin la racine.

Page 49: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

49

LES ARBRES BINAIRES ORDONNÉES

La visite arborescente

Par niveau : on traite l ’arbre niveau par niveau, de la racineaux feuilles

Page 50: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

50

LES ARBRES BINAIRES ORDONNÉES

La visite arborescente

32

28

23

18 31 33

17

7

2 13

1 5 8

Priorité au père : 17, 7, 2, 1, 5, 13, 8, 28, 23, 18, 32, 31, 33Priorité au fils : 1, 5, 2, 8, 13, 7, 18, 23, 31, 33, 32, 28, 17Priorité symétrique : 1, 2, 5, 7, 8, 13, 17, 18, 23, 28, 31, 32, 33

Page 51: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

51

LES ARBRES BINAIRES ORDONNÉES

La visite arborescente

L'impression d'un arbre de tri se fait par un parcours en ordre puisque la valeur stockée dans le noeud racine se situe entre les valeurs du sous-arbre gauche et celles du sous-arbre droit.

L'évaluation d'un arbre syntaxique se fait avec un parcours enpost-ordre puisqu'il faut évaluer les deux opérandes avant de pouvoir traiter l'opérateur.

Page 52: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

52

LES ARBRES BINAIRES ORDONNÉES

La visite arborescente

int nb_el_a(arbre a) { arbre a1, a2;

if(a == NULL)return 0; a1.racine=a.racine->fils1;

a2.racine=a.racine->fils2;return (1+nb_el_a(a1)+nb_el_a(a2));

}

Un autre opérateur..

Page 53: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

53

LES ARBRES BINAIRES ORDONNÉES

La visite arborescente

On peut remarquer que diverses écritures sont possibles: 1 + nb_el_a(a1) + nb_el_a(a2) nb_el_a(a1) + 1 + nb_el_a(a2) nb_el_a(a1) + nb_el_a(a2) + 1

Ceci correspond aux différents parcours d'arbres.

Page 54: 1 LES ARBRES Un arbre est une structure homogène dont chaque élément, appelé noeud, contient de l'information et plusieurs liens (pointeurs) vers des éléments.

54

LES ARBRES BINAIRES ORDONNÉES

Opérations sur les arbres binaires de tri & de recherche

Nous reviendrons courant les prochaines séances sur les opérations les plus courantes que l'on effectue sur une structure d'arbre,entre autres:

l ’insertion dans un arbre de recherche. la suppression dans un arbre de tri et de recherche.

En plus de découvrir les algorithmes d ’équilibration d ’arbres binaires de recherche...