chapitre 3 les arbres binaires un arbre est un ensemble de nœuds, organisés de façon...

51
Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé 1

Upload: audric-astier

Post on 03-Apr-2015

113 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Chapitre 3 Les arbres binaires

Un arbre est un ensemble de nœuds,

organisés de façon hiérarchique, à partir d'un nœud distingué,

appelé racine. 1

Page 2: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

La structure d'arbre est l'une des plus importantes et des plus spécifiques de l'informatique:

par exemple, c'est sous forme d'arbre que sont organisés les fichiers dans des systèmes d'exploitation tels que UNIX ;

c'est aussi sous forme d'arbres que sont représentés les programmes traités par un compilateur… 2

Page 3: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Une propriété intrinsèque de la structure d'arbre est la récursivité, et les définitions des caractéristiques des arbres, aussi bien que les algorithmes qui manipulent des arbres s'écrivent très naturellement de manière récursive.

3

Page 4: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Arbres binaires

• les résultats d'un tournoi de tennis : au premier tour Jean a battu Jules, Marc a battu François, Paul a battu Yves, et Luc a battu Pierre ; au deuxième tour Jean a battu Marc, et Paul a battu Luc ; et Jean a gagné en finale contre Paul.

4

Page 5: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

5

JeanJean Paul

Marc Jean Paul Luc

Marc François Jean Jules Yves Paul Pierre Luc

Page 6: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

• pedigree d'un cheval Zoe ; son père est Tonnerre et sa mère Belle ; mère de Belle est Rose et père de Belle est Eclair…

ZoeTonnerre Belle

Eclair Rose

6

Page 7: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

• une expression arithmétique dans laquelle tous les opérateurs sont binaires

(5 + 8) * 4

*+ 4

5 8

7

Page 8: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Définition d'un arbre binaire

étant donné un arbre B = <o, B1, B2 > :• 'o' est la racine de B.• B1 est le sous-arbre gauche de la racine de B,

(ou, plus simplement, le sous-arbre gauche de B), et B2 est son sous-arbre droit.

• On dit que C est un sous-arbre de B si, et seulement si : C = B, ou C = B1, ou C = B2, ou C est un sous-arbre de B1, ou de B2.

8

Page 9: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

•On appelle fils gauche (respectivement fils droit) d'un nœud la racine de son sous-arbre gauche (respectivement sous-arbre droit), et l'on dit qu'il y a un lien gauche (respectivement droit) entre la racine et son fils gauche (respectivement fils droit).

•Si un nœud ni a pour fils gauche (respectivement droit) un nœud nj, on dit que ni est le père de nj (chaque nœud n'a qu'un seul père).

•Deux nœuds qui ont le même père sont dits frères.

9

Page 10: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

•Le nœud ni est un ascendant ou un ancêtre du nœud nj si, et seulement si, ni est le père de nj, ou un ascendant du père de nj ; ni est un descendant de nj si, et seulement si ni est fils de nj, ou ni est un descendant d'un fils de nj.

•Tous les nœuds d'un arbre binaire ont au plus deux fils :un nœud qui a deux fils est appelé nœud interne ou point doubleun nœud sans fils est appelé nœud externe ou feuille.

10

Page 11: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

11

Donc, un arbre binaire est :

•soit vide

•soit constitué d'un élément de type T et d'au plus 2 arbres binaires

Page 12: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Représentation d'un arbre.

• La représentation la plus naturelle reproduit la définition récursive des arbres binaires. Elle peut être réalisée en allouant la mémoire soit de façon chaînée soit de façon contiguë.

• Représentation classique d'un arbre est dynamique. • A chaque nœud on associe deux pointeurs, l'un vers le

sous-arbre gauche, l'autre vers le sous-arbre droit, et l'arbre est déterminé par l'adresse de sa racine. Lorsque l'arbre est étiqueté, on représente dans un champ supplémentaire l'information contenue dans le nœud.

12

Page 13: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

13

typedef struct arbre {T info;struct arbre * sag, *sad} noeud_arbre

typedef noeud_arbre *arbre

Si a est un pointeur sur la racine de l'arbre, alors a=NULL correspond à un arbre vide ; a->sag pointe sur le fils gauche de a; a->sad pointe sur le fils droit de a ; a->info permet d'accéder au contenu du nœud.

On ne parle d'arbres binaires que par l'intermédiaire des algorithmes qui utilisent le type arbre.

Page 14: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Algorithmes de parcours d'un arbre binaire

• Parcours en profondeur d'abord : examiner complètement un chemin et passer au chemin suivant tant qu'il en reste

ab c

d k m

14

Page 15: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

15

•Parcours en largeur d'abord : examiner tout un niveau (profondeur hiérarchique) passant au niveau du dessous tant qu'il en reste.

Problème : pas de lien entre fils. Cela doit être traité itérativement.

5

7 34 1 8

2 6

Page 16: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Parcours en profondeur d'abord

a)Préordre : a b d k c mSi arbre non vide alors :

traiter la racine parcourir en préordre le sagparcourir en préordre le sad

ab c

d k m16

Page 17: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Algorithme

données : arbre p Entête en C : void preordre(arbre a) {SI (a NULL) alors

{afficher (a->info)preordre (a->sag)preordre (a->sad)}

}

17

Page 18: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

18

b) Ordre : d b k a c m

SI arbre est non vide alors :parcourir en ordre le sagtraiter la racineparcourir en ordre le sad

ab c

d k m

Page 19: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Algorithme

données : arbre a Entête en C : void ordre(arbre a) {SI (a NULL) ALORS

{ordre(a->sag)afficher(a->info)ordre(a->sad)}

}

Remarque : Cet algorithme nous permet d'obtenir les informations dans un ordre total. On peut rentrer les informations dans un arbre binaire de façon triée.

19

Page 20: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

20

c) Postordre : d k b m c a

SI arbre n'est pas vide :parcourir en postordre le sagparcourir en postordre le sadtraiter la racine

ab c

d k m

Page 21: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Arbres binaires de recherche (ABOH)

ABOH : Arbre Binaire Ordonné Horizontalement

21

Page 22: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

22

Il est tel que pour tout nœud de l'arbre, les éléments de son sag lui sont inférieurs, de son sad lui sont supérieurs ou égaux.

Exemple :

3015 < 50

10 < 35 < 601 < 11

On a bien l'arbre ordonné horizontalement.

Pour un parcours en ordre on obtient 1 10 11 15 30 35 50 60 

Page 23: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

23

Donc, relation d'ordre totale. Ordre croissant : sag – racine – sad décroissant : sad – racine – sag

Page 24: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Algorithmes de manipulation

24

Page 25: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

a) Le parcours ordre

Le parcours ordre décrit avant donne les éléments en ordre total croissant ou décroissant selon la définition choisie pour ABOH et la priorité de traitement du sag par rapport au sad.

25

Page 26: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

b) Recherche d'un élément dans un ABOH

• Pas de notion de retour arrière, on ne parcourt qu'une branche de l'arbre car on sait si l’élément recherché est plus grand ou plus petit que la valeur contenue dans la racine.

• Donc, le parcours est naturellement dichotomique.

26

Page 27: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Principe

SI l'arbre est vide ALORS fin et échecSINON

SI l'élément cherché = élément pointé ALORS fin et réussiteSINON

SI l'élément cherché < élément pointé ALORSrechercher l'élément dans le sag

SINON

rechercher l'élément dans le sad

27

Page 28: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Algorithme

données : arbre a ; T x

résultat de type logique

 

Entête en C : int recherche(T x, arbre a)

28

Page 29: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

29

{variables locales : logique ok

SI (a = NULL) ALORSok faux

SINONSI (a->info = x) ALORS

ok vraiSINON

SI (a->info > x) ALORSok recherche(x, a->sag)

SINONok recherche(x, a->sad)

retourner ok}

Page 30: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

30

!!! Cet algorithme renvoie la première occurrence du terme cherché, c.à.d. qu'il renvoie vrai la première fois où il rencontre l'élément cherché, et il s’arrête.

Si on recherche la nième apparition de l'élément dans l'arbre, il faut mettre un compteur.

Page 31: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

c) Ajout d'un élément dans un ABOH

Placer l'élément dans l'arbre en conservant l'ordre et faisant le moins de réorganisation possible.

31

Page 32: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Principe

Un ajout d'élément dans un ABOH se fait systématiquement aux feuilles :

1) SI arbre est vide ALORS création et ajoutSINON trouver la feuille Trouver la feuille : parcourir l'arbre et rechercher la position de l'élément:c.à.d. comparer l'élément à ajouter à la valeur contenue dans la racine :

SI la valeur contenue dans la racine > élément à ajouter ALORS ajout dans le sag, donc retour en 1) avec le sag.SINON ajout dans le sad, donc retour en 1) avec le sad

32

Page 33: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

33

Exemple :

30NULL NULL

On veut ajouter 10 et 50

3010 50

NULL NULL NULL NULL

On veut ajouter 5 et 1530

10 50 5 15 NULL NULL NULL NULL NULL NULL

On veut ajouter 6 et 1230

10 50 5 15 NULL NULL

NULL 6 12 NULL

Page 34: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Algorithme (en récursif)données : T xdonnées modifiées : arbre *pa Entête en C : void ajout(T x, arbre *pa)

34

Page 35: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

35

{SI (*pa = NULL) ALORS

{reserver(*pa)*pa->info x*pa->sag NULL*pa->sad NULL}

SINONSI (*pa->info x) ALORS

ajout(x, &(*pa->sad))SINON

ajout(x, &(*pa->sag))}

Page 36: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

36

*pa est en donnée modifiée, donc on gère bien le lien avec la récursivité.

Remarque : le mode de transmission par référence crée automatiquement le lien entre le père et le fils

Remarque : Ce qui ne marche pas :q *pa->sadajout(x, &q)

 Dans ce cas le lien est cassé. Ne pas faire !!!

Page 37: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

d) Suppression d'un élément dans un ABOH

1. L'élément est une feuille Suppression simple :

• libération mémoire• mise à jour du pointeur concerné dans le père

12

3 15

37

Page 38: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

38

2. L'élément est le père d'un seul sous-arbre 

• mise à jour du pointeur concerné dans le père de l'élément supprimé avec l'adresse de la racine du sous-arbre de l'élément supprimé.

• libération mémoire

65 10

31 4 

Page 39: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

39

3. L'élément à deux sous-arbres

15 109 25

8 13 164 18

2 5 10 14 11

On veut supprimer le 9

• Rechercher le plus grand du sag (ou le plus petit du sad)

• Recopier sa valeur à la place de l'élément à supprimer

• Supprimer le plus grand du sag (ou le plus petit du sad) par la méthode 1 ou 2 (feuille ou un seul sous-arbre)

Page 40: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

40

Principe

1)Si l'arbre est vide, retourner faux

SINON• Si la valeur à supprimer est plus petite que le contenu de la racine, retour en 1) avec le sag

• Si la valeur à supprimer est plus grande que le contenu de la racine, retour en 1) avec le sad

• Si la valeur à supprimer = contenu de la racine(on a trouvé la valeur à supprimer)

a) ni sag, ni sad ALORS libération et retour avec vrai

b) sad et non sag ou sag et non sad ALORS mise à jour du père, libération et retour avec vrai

• sag et sad ALORS recherche du plus petit élément dans le sad remplacement de la valeur à supprimer par le plus petit dans le sad suppression du plus petit dans le sad avec a) ou b) retour avec vrai

Page 41: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

41

Algorithme

données : T xdonnées modifiées : arbre *parésultat de type logique

Entête en C : int suppression(T x, arbre *pa)

{variables locales : int ok ; arbre qSI (*pa = NULL) ALORS

ok fauxSINON

SI (*pa->info > x) ALORSsuppression(x, &(*pa->sag))

SINONSI (*pa->info < x) ALORS

suppression(x, &(*pa->sad))

Page 42: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

42

SINON /*on a trouvé */{ok vraiSI (*pa->sag = NULL)

{q *pa*pa *pa->sadliberer(q)}

SINON{SI *pa->sad = NULL

{q *pa*pa *pa->sagliberer(q)}

SINON…………………../* à finir */}

Page 43: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Algorithmes sur l'équilibre des arbres binaires

Déséquilibre possible d'un ABOH.5 12

10 10 1512 5

18 1518

43

Page 44: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

44

Si un arbre est déséquilibré, ses performances sont instables.

D'où les performances dépendent de la façon d'entrer les informations.

La recherche n'est plus dichotomique dans un arbre déséquilibré.

Page 45: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

Définition d'un arbre équilibré

Mesures parfait : Pour tout nœud de l'arbre, la valeur

absolue de la différence entre le nombre des nœuds du sad et le nombre des nœuds du sag est inférieure ou égale à 1.

|ng – nd| 1

45

Page 46: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

46

exemples :

parfaitement équilibré n'est pas parfaitement équilibré

partiel : Pour tout nœud de l'arbre, la valeur absolue de la différence entre la hauteur du sad et la hauteur du sag est inférieure ou égale à 1. Tous les deux arbres de l’exemple précédent sont partiellement équilibrés

Page 47: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

47

Il y en a des possibilités permettant d'éviter la construction des arbres déséquilibrés. Par exemple, des arbres AVL.

|hg – hd| 1

sag sad

balance : -1 : hsag = hsad + 1 0 : hsad = hsag +1 : hasd = hsag + 1

info

balance

Page 48: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

48

Compter le nombre de noeuds dans un arbre binaireCompter le nombre de noeuds dans un arbre binaire

PrincipeSI l'arbre est vide retourner 0.SINON

compter le nombre de nœuds du sagcompter le nombre de nœuds du sadretourner 1 + nsag + nsad

Page 49: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

49

Algorithme

données : arbre arésultat de type entier

Entête en C : int compter(arbre a)

{SI (a = NULL) ALORS

n 0SINON

n 1 + compter(a->sag) + compter(a->sad)}

Page 50: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

50

Calculer l’hauteur d’un arbre binaireCalculer l’hauteur d’un arbre binaire

Principe  SI l'arbre est vide retourner 0.SINON

calculer la hauteur du sagcalculer la hauteur du sadSI hg > hd retourner 1 + hgSINON retourner 1 + hd

Page 51: Chapitre 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. 1

51

Vérifier si un arbre binaire est parfaitement équilibréVérifier si un arbre binaire est parfaitement équilibré

Principe

SI l'arbre est vide, il est parfaitement équilibréSINON

compter le nombre de nœuds du sagcompter le nombre de nœuds du sadSI |ng – nd| > 1 retourner fauxSINON

vérifier l'équilibre parfait du sagSI oui

vérifier l'équilibre parfait du sadSI oui retourner vraiSINON retourner faux

SINON retourner faux