Les Arbres
Qu est ce qu un arbre? Un arbre est un modèle abstrait d une structure hiérarchique Un arbre est constitué de nœuds reliés par une relation parent-enfant A=(N,P) N ensemble de nœuds P relation binaire parents de r N, la racine Il y a un chemin unique entre la racine r et chaque nœud
Exemple 1 2 3 4 5 6 7 8 9 10
Applications Livres (chapitres, sections, paragraphes ) Expressions arithmétiques Compression de données (code de Huffman) Organisation de fichiers Arbres généalogiques Tri Décomposition syntaxique
Arbre généalogique Paul Jean Cécile Rita Karl Sylvie Jack Sophie Sébastien Bob Jean Steve
Arbres syntaxiques Un arbre syntaxique représentant une expression * - + 75 2 6 4
Arbres syntaxiques Un arbre syntaxique représentant l analyse d une phrase Phrase Groupe nominal Groupe verbal article nom commun verbe complément la lionne dévore article nom commun le steak
Arbres de décision Quel temps fait-il? couvert Ensoleillé pluvieux Température? La voisine bronze devant ma fenêtre? Je reste chez moi oui > 10 degré 10 degré non Je sors le chien Je reste chez moi Je sors le chien Je reste chez moi
Arbre lexicographique Un arbre lexicographique, ou arbre en parties communes, ou dictionnaire
Arbres Quartiques Arbre quartique si image toute noire si image toute blanche sinon 1 2 4 3 1 2 3 4 UMLV
Arbres Quartiques...... UMLV
Exemple: Arbre de jeu (Tic tac toe)
Terminologie sous-arbre Racine : le noeud sans parent (prédécesseur) Noeud interne (intérieur) : noeuds ayant au moins un enfant (successeur) Feuilles : noeuds n ayant aucun successeur Sous-arbre: arbre constitué d un noeud et de ses descendants
Terminologie Ancêtres d un nœud: parent, grands-parents, arrière grands-parents... Descendants d un nœud: fils, petit-fils, arrière petit-fils... Frères d un nœud: tous les autres nœuds ayant le même parent B, C, D enfants de A C, D frères de B A, C ancêtres de G I, J descendants de G
Terminologie : Profondeur et niveau Profondeur d un nœud v: le nombre d ancêtres de v ou distance de v à la racine Profondeur(v) = 0 si v = racine 1 + profondeur(parent (v) ) sinon Le niveau n est formée des sommets de profondeur p. 0 A 1 B C D 2 E F G H 3 I J
Terminologie: Hauteur h(v) = distance de v à son plus lointain descendant qui est une feuille h(v) = 0 si v est une feuille 1 + max { h(e) e enfant de x } sinon h(arbre) = h(racine(arbre)) A h (H) = 0 h (G) = 1 h (C) = 2 h(arbre) = h (A) = 3 B C D E F G H I J
Définition récursive Rien Une racine Une racine + des sous-arbres : r... Sous- arbres
Les différents types d arbres Il existe plusieurs types d arbres, les principaux sont les suivants : Arbre binaire : C est un arbre dont un nœud n accepte pas plus de deux nœuds, un nœud fils à droite et un fils à gauche (à part les feuilles). Dans ce type d arbre on a : Arbre binaire (non équilibré) L arbre AVL (Arbre binaire équilibré) Arbre n-aires : C est un arbre dont chaque nœud peut accepter de 0 à n nœuds. Dans ce type d arbre on a: arbre de recherche (arbre non équilibré) Le B-arbre Le B-arbre* Le B-Arbre+
Parcours Parcourir un arbre signifie visiter dans un certain ordre tous ses nœuds. Utile pour l exploration des arbres Deux catégories : Parcours en largeur : parcours niveau par niveau Parcours en profondeur: préfixe, Suffixe (postfix), Infixe (symétrique) parcours branche après branche
Parcours en largeur Parcours niveau par niveau : on visite les nœuds niveau par niveau, de gauche à droite, en commençant par la racine A B C D E F G H I J (A,B,C,D,F,G,H,I, J) Quelle structure de données pour l itérateur?
Parcours en profondeur Préfixe : d abord la racine, puis récursivement les sous-arbres de gauche à droite suffixe :d abord récursivement les sous-arbres de gauche et de droite, puis la racine Infixe : d abord récursivement le premier sousarbre de gauche, puis la racine, puis récursivement les sous-arbres restant
Parcours en profondeur 1 2 3 4 5 6 7 8 9 10 Parcours préfixe : (1, 2, 5, 6, 3, 7, 9, 10, 4, 8) Parcours suffixe : (5, 6, 2, 9, 10, 7, 3, 8, 4, 1) Parcours infixe : (5, 2, 6, 1, 9, 7, 10, 3, 8, 4)
Parcours en profondeur + * / a b - d b c Préfixe : + * a b / - b c d suffixe : a b * b c - d / + Infixe : (a * b) + ((b - c) / d)
Les arbres dans la STL Se retrouvent notamment sous quatre dénominations : set : permet de représenter des ensembles au sens mathématique du terme map : permet de représenter des dictionnaires (clé, valeur) multiset : représente des multi-ensembles multimap : représente des dictionnaires avec des collisions Structure de données sous jacente : structure d'arbre avec des variantes suivant les compilateurs (arbre RB,B+,...)