Partie 3 Gilles Lebrun (gilles.lebrun@unicaen.fr)
Les arbres binaires Définition : C est une structure arborescente ou hiérarchique ou récursive Chaque élément (nœud) constituant la structure de l arbre a : au plus un prédécesseur et au plus deux successeur Trois types de nœud b Racine ou sommet de l arbre Feuilles ou nœuds à la base de l arbre Internes (les autres qui ne sont ni racine, ni feuille Quelques règles Les arbres sont connexes (UNE et UNE seule racine) Il existe UN et UN seul chemin pour aller de la racine à un nœud b b
Les arbres binaires Quelques définitions Sous-arbre direct d un arbre L arbre ayant pour racine le fils gauche ou le fils droit de la racine Profondeur d un arbre Distance maximum pour aller de la racine à une des feuilles de l arbre Profondeur d un nœud longueur du chemin de la racine au nœud Hauteur d un nœud : longueur du chemin du nœud à la feuille la plus profonde Taille d un arbre nombre de nœuds dans l arbre Taille d un nœud nombre de fils et petit-fils du nœud + le nœud
Les nœuds chaque nœud contient Uneinstanced uneclassedebase Un successeur gauche un successeur droit. Référence sur le sous-arbre gauche élément Référence sur le sous-arbre droit
Exemple d arbre binaire Racine Fils gauche A Fils droit Nœud interne B E Feuille C D F Profondeur 3 Sous arbre gauche
TAD arbre binaire Extrait de https://moodle.insa-rouen.fr/file.php/60/cours/collection-4pagesparpage.pdf
Complexité et arbre binaire (1) La complexité d une opération sur un arbre binaire peut dépendre de la profondeur maximum d un arbre. Elle est notée h. h est proportionnel àlog(n) si l arbre binaire est équilibré
Complexité et arbre binaire (2) L insertion, et la suppression à une complexité qui dépend de l information initiale sur l élément concerné O(1) à partir d un nœud connu O(log(n)) à partir de la racine si : Arbre binaire équilibré A chaque nœud traversé, la sélection du fils gauche ou du fils droit pour atteindre le nœud concerné est unique Sinon O(n) pire cas
Complexité et arbre binaire (3) La recherche d un élément dans un arbre binaire O(log(n)) dans le meilleur des cas O(n) dans le pire des cas Les raisons étant les mêmes que pour l insertion ou la suppression Les raisons étant les mêmes que pour l insertion ou la suppression d un élément à partir de la racine d un arbre car cette procédure nécessite également la recherche du nœud concerné
Parcours d un arbre Parcours en profondeur 1. Préfixé 2. Infixé ABCDEF CBDAEF 3. Postfixé CDBFEA A On explore tous les fils gauches en premier jusqu à une feuille, puis récursivement en remontant vers la racine on explore le fils droit, puis à nouveau tous les fils gauches B E 1 C 3 D F 2
Parcours d un arbre Parcours en largeur Parcours tous les éléments (noeuds) en commençant par ceux à la profondeur 1 et en continuant avec ceux aux profondeurs 2, 3, 1 A 2 B E 3 C D F Résultat : ABECDF
Les arbres binaires de recherche Structure de données permettant de réaliser des recherches avec insertion/suppression de nœuds de manière efficace avec conservation de la notion d ordre entre les éléments de l arbre Pour chaque nœud N de l arbre binaire Toutes les valeurs du sous-arbre gauche sont plus petites que N Toutes les valeurs du sous-arbre droit sont plus grandes que N
Exemple 15 7 20 6 9 25 Insertion 5
Insertion d un élément Stratégie : L élément doit être ajouté à un nœud feuille préservent l ordre interne à la structure de données 15 7 20 6 9 25 5 Possible par un simple parcours en profondeur
Insertion des éléments 15 7 20 6 9 25 5 8 23
Suppression élément Stratégie : l élément pivot du sous-arbre droit remplace le nœud supprimé 15 7 68 20 6 9 25 5 23 8
Réorganisation de l arbre Pour éviter de produire une structure linéaire non efficace suite à des insertions et suppressions, il est parfois nécessaire de restructurer l organisation de l arbre binaire pour la rendreplusefficace 868 6 6 5 868 5
Python et les TAD arbre Ecrire sa propre structure de données (classe) Utiliser une librairie existante pour les arbres binaires pyavl : librairie avl (les avl étant des arbres binaires de recherche) écrite initialement en C avec un wrapper python représentation interne spécialisée dans une thématique particulière comme les parseurs XML : SAX Utiliser une librairie sur les graphes python graph les arbres (binaires) étant une sous classe des graphes http://sourceforge.net/projects/pyavl/ http://docs.python.org/library/xml.sax.html http://code.google.com/p/python-graph/
Code python : Arbre binaire
Code python : Arbre binaire