Arbres Binaire

publicité
Arbres Binaire
PSI DAKHLA
Prof Youssef El marzak
1
Prof Youssef Elmarzak
1.introduction:
Les arbre sont très utilisées en informatique, d’une part
parce que les informations sont souvent hiérarchisées, et
peuvent être représentées naturellement sous une forme
arborescente, et d’autre part, parce que les structures de
données arborescentes permettent de stocker des données
volumineuses de façon que leur accès soit efficace.
2
Prof Youssef Elmarzak
III.Définitions et terminologie
Un arbre binaire est un ensemble fini de valeurs qui est :
soit vide, soit constitué d’une racine et des valeurs de deux arbres
binaires disjoints appelés sous-arbre gauche et sous-arbre droit de la
racine.
3
Prof Youssef Elmarzak
III.Définitions et terminologie
Un arbre est un graphe sans cycle, où des nœuds sont reliés par des
arêtes. On distingue trois sortes de nœuds :
• les nœuds internes, qui ont des fils ;
• les feuilles, qui n'ont pas de fils ;
• la racine de l'arbre, qui est l'unique nœud ne possédant pas de père.
Traditionnellement, on dessine toujours la racine en haut et les feuilles
en bas.
4
Prof Youssef Elmarzak
III.Définitions et terminologie
 Chaque élément est appelé nœud,
 un nœud contient :
 Une valeur
 sous-arbre gauche
 sous-arbre droit
 le nœud initial étant appelé racine d’arbre binaire
 Une feuille est la racine d’un arbre binaire dont la sous-arbre gauche et la sousarbre droit sont vides.
5
Prof Youssef Elmarzak
III.Définitions et terminologie
On utilise pour les arbres une terminologie inspirée des liens de parenté :
 les descendants d’un nœud p sont les nœuds qui apparaissent dans ses
sous-arbres,
 un ancêtre d’un nœud p est soit son père, soit un ancêtre de son père
Tous les nœuds d'un arbre ont un et un seul parent, sauf la racine.
 Frère : Nœuds de même parent
Feuille : nœud sans fils
 Racine : le seul nœud sans père
Degré d'un nœud : nombre de ses enfants
Profondeur d'un nœud : longueur du chemin entre la racine et ce nœud
Hauteur d'un arbre : profondeur maximale de ses nœuds
 Hauteur d'un nœud : longueur maximale du chemin entre ce nœud et une
feuille
6
Prof Youssef Elmarzak
III.Définitions et terminologie
Niveau L dans un arbre = ensemble des nœuds de profondeur L
Taille d'un arbre = nombre de ses nœuds
7
Prof Youssef Elmarzak
IV. Parcours:
A. Parcours en largeur
Le parcours en largeur correspond à un parcours par
niveau de nœuds de l'arbre. Un niveau est un ensemble
de nœuds ou de feuilles situés à la même profondeur.
Autrement dit, de haut en bas, niveau par niveau (et de
gauche a droite)
Ainsi, si l'arbre ci-contre est utilisé, le parcours sera
A, B, C, D, E, F, G.
8
Prof Youssef Elmarzak
IV. Parcours:
B.Parcours en profondeur
Le parcours en profondeur est un parcours récursif sur un arbre. Il existe
trois ordres pour cette méthode de parcours. Le parcours en profondeur
préfixé est le plus courant.
1) Parcours préfixe, ou préodre (NGD) : tout Nœud est suivi des
nœuds de son sous-arbre Gauche puis des nœuds de son sousarbre Droit
le parcours sera A, B, D, E, C, F, G.
9
Prof Youssef Elmarzak
IV. Parcours:
B.Parcours en profondeur
2) Parcours suffixe, post-fixe (GDN) : tout
Nœud est précédé des nœuds de son sousarbre Gauche et des nœuds de son sous-arbre
Droit
le parcours sera D, E, B, F, G, C, A
10
Prof Youssef Elmarzak
IV. Parcours:
B.Parcours en profondeur
3) Parcours infixe, ou symétrique (GND) : tout Nœud est
précédé des nœuds de son sous-arbre Gauche et suivi des nœuds
de son sous-arbre Droit
le parcours sera D, B, E, A, F, C puis G.
11
Prof Youssef Elmarzak
Exercice d’application:
Parcourez l'arbre ci-dessous selon les quatre méthodes vues
précédemment
12
Prof Youssef Elmarzak
Solution :
Parcours en largeur :
a,b,c,d,e,fg,h,k,i
Parcours préfixe Nœud, Gauche, Droite a, b, d, e, h, c, f, i, g, k
 Parcours infixe Gauche, Nœud, Droite d, b, h, e, a, f, i, c, k, g
 Parcours suffixe Gauche, Droite, Nœud d, h, e, b, i, f, k, g, c, a
13
Prof Youssef Elmarzak
V. Arbre binaire : Application sous Python
Pour construire sa propre arbre binaire sous Python on peut utiliser les listes
ou autre structures de données
 Dans cette partie nous allons utilisé les listes pour construire et gérer une
arbre binaire
 La liste sera sous la forme suivante:
[donnée, sous_arbre_gauche, sous_arbre_droite]
Une feuille est la racine d’un arbre binaire dont la sous-arbre gauche et la sousarbre droit sont égale à None.
14
Prof Youssef Elmarzak
Arbre binaire : Application sous Python
Utilisation d'une liste Python
Exemple :
Arb=[15, [7, [6, [None], [None]], [9, [None], [None]]], [20, [None], [25, [None], [None]]]]
15
Prof Youssef Elmarzak
Arbre binaire : Application sous Python
les fonctions de base :
La fonction arbre_binaire(r) construit simplement une liste avec un nœud
racine et deux sous-listes vides pour les fils et r c’est la valeur de la racine
La fonction change_racine(arbre,newvaleur) change la valeur du nœud racine,
cette fonction prend comme paramètre un arbre et la nouvelle valeur du nœud racine
16
Prof Youssef Elmarzak
Arbre binaire : Application sous Python
La fonction valeur_racine(arbre) affiche la valeur de la racine
Maintenant nous allons écrire un couple de fonctions d'accès pour obtenir et
définir la, ainsi les sous-arbres gauche ou à droite.
Avoir la sous-arbre gauche :
Avoir la sous-arbre droite :
17
Prof Youssef Elmarzak
Exemple : exécution interactive des fonctions de base précédente
Considérant Arbre-2 défini ci-dessus, on suivant les exécutions suivantes:
>>> arbre2 = [1, [2, [3, [None], [None]], [None]], [5, [None], [6, [None],
[None]]]]
>>> SAgouche(arbre2)
[2, [3, [None], [None]], [None]]
>>> SAdroite(arbre2)
[5, [None], [6, [None], [None]]]
>>> valeur_racine(arbre2)
1
>>> valeur_racine(SAgouche(arbre2))
2
>>> SAdroite(SAdroite(arbre2))
[6, [None], [None]]
>>> est_feuille(SAdroite(SAdroite(arbre2)))
True
>>>
18
Prof Youssef Elmarzak
Arbre binaire : Application sous Python
19
Prof Youssef Elmarzak
Arbre binaire : Application sous Python
Parcours en profondeur
Parcours préfixe (NGD) :
On va essayé de écrire une procédure récursive nommée prefixe(arbre) "
qui traverse un arbre binaire en ordre (Neoud, gauche ,droite)
le parcours sera A, B, D, E, C, F, G.
20
Prof Youssef Elmarzak
Arbre binaire : Application sous Python
Parcours en profondeur
Parcours préfixe (NGD) :
Exemple d’exécution:
>>> arbre2 = [1, [2, [3, [None], [None]], [None]], [5, [None], [6, [None],
[None]]]]
>>> prefixe(arbre2)
[1],[2],[3],[5],[6],>>>
21
Prof Youssef Elmarzak
Arbre binaire : Application sous Python
Parcours en profondeur
Parcours infixe (GND) :
Maintenant On va essayé de écrire une procédure récursive nommée
infixe(arbre) " qui traverse un arbre binaire en ordre ( gauche, Neoud ,droite)
le parcours sera D, B, E, A, F, C puis G.
22
Prof Youssef Elmarzak
Arbre binaire : Application sous Python
Parcours en profondeur
Parcours infixe (GND) :
Exemple d’exécution:
>>> arbre2 = [1, [2, [3, [None], [None]], [None]], [5, [None], [6,
[None], [None]]]]
>>> sufixe(arbre2)
[3],[2],[6],[5],[1],
23
Prof Youssef Elmarzak
Téléchargement