Les arbres Arbres binaires CPGE OUJDA SPE Les arbres Un arbre binaire (ou n-aire) est une structure de données de type hiérarchique. Les éléments constituant un arbre ont pour nom : racine, nœuds et feuilles. Le nœud initial est nommé racine. Les éléments terminaux sont des feuilles. Dans un arbre binaire, chaque élément possède au plus deux éléments fils au niveau inférieur. Un arbre qui possède deux voire plus de sous éléments est appelé "père", les éléments inférieurs étant appelés des "fils". Arbres binaires Dans un arbre binaire, chaque élément possède au plus deux éléments fils au niveau inférieur, habituellement appelés fils gauche et fils droit. Le parcours d'un arbre peut se faire en profondeur ou en largeur de la gauche G vers la droite (resp : de la droite vers la gauche) A B C D E F
Représentation d'un arbre Arbres n-aires Arbres n-aires A B C D E F G H L'arité d'un arbre est déteminée par le nombre maximum de fils qu'un nœud peut avoir. Ici nous avons un arbre 3-aires Représentation d'un arbre Il existe différentes manières de représenter un arbre en machine. A l'aide : d'une liste de listes d'une matrice de taille optimale d'une matrice de taille 2n (uniquement pour les arbres binaires) d'un dictionnaire Voici une représentation sous forme de listes chaque sous-arbre sera sous représenté à l'aide d’une liste : Nœud = [ nomDuNoeud, [ liste sous arbre ] ] Chaque feuille sera représentée à l'aide d'une liste Feuille =[ nomDeLaFeuille , []]
Parcours en profondeur Exemple A C B D arbre 1 E F G H ['A', [['B', [['E', []], ['F', []]]], ['C', []], ['D', [['G', []], ['H', []]]]]] A B C arbre 2 D E F ['A', [['B', [['D', []], ['E', []]]], ['C', [['F', []], ['G', []]]]]] G Parcours en profondeur def parcoursEnProfondeur(racine): sommet = racine[0] lesfils = racine[1] print(sommet) for noeud in lesfils: parcoursEnProfondeur(noeud) Exemple : parcoursEnProfondeur(arbre1))
Parcours en largeur Exemple def parcoursEnLargeur(racine): fifo = [racine] while fifo: arbre_courant = fifo.pop(0) sommet_courant = arbre_courant[0] les_fils_courant = arbre_courant[1] print(sommet_courant) for fils in les_fils_courant: if fils : fifo.append(fils) Exemple parcoursEnLargeur(arbre1))