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