Algorithmique avancée et complexité Arbres binaires

publicité
Algorithmique avancée et complexité
Arbres binaires
Arbres :
Un arbre est un graphe orienté connexe sans cycle et muni d’une racine.
Dans un arbre, on distingue deux catégories d’éléments :
Les feuilles (ou nœuds externes), éléments ne possédant pas de fils dans l’arbre ;
Les nœuds internes, éléments possédant des fils.
La racine de l’arbre est l’unique nœud ne possédant pas de parent.
Étiquette (valeur portée par un nœud). Toutes les étiquettes d’un arbre possèdent le
même type.
La profondeur d’un nœud dans un arbre est le nombre de nœuds du chemin qui va de la
racine à ce nœud.
La profondeur d’un arbre A est égale au nombre de nœuds de la branche la plus longue.
Arbre vide de profondeur 0, Arbre réduit à sa racine de profondeur 1.
La hauteur d’un nœud est la longueur du plus long chemin de ce nœud aux feuilles qui
en dépendent.
La hauteur d’un arbre est la hauteur de sa racine.
Une feuille est un arbre de hauteur 0, l’arbre vide à la hauteur −1.
Arbres binaires : arbre dans lequel chaque nœud possède au plus deux fils appelés fils
gauche et fils droit (Tout nœud de l’arbre a 0, 1, ou 2 successeurs).
Un arbre binaire équilibré en hauteur est un arbre dans lequel, pour tout nœud, la
différence entre la hauteur des sous-arbres de gauche et de droite est ≤ 1.
Un arbre binaire entier est un arbre dont tous les nœuds possèdent zéro ou deux fils.
Un arbre binaire parfait (complet) est un arbre binaire entier dans lequel toutes les
feuilles sont à la même distance de la racine (chaque niveau de l'arbre est complètement
rempli).
Un arbre est une structure de données récursive.
Exemple en C d’un arbre binaire stockant des entiers :
typedef struct Arbre {
int val;
struct Arbre *gauche;
struct Arbre *droit;
} *Arbre;
Un arbre est un pointeur vers un nœud racine.
En algo : Déclaration d’un arbre : Arbre arbre.
arbre*.val : valeur portée par le nœud racine.
arbre*.gauche : pointeur vers le sous-arbre gauche.
arbre*.droit : pointeur vers le sous-arbre droit.
Algorithmique avancée et complexité
Arbres binaires
Feuille d’exercices n°6
Exercice 1 :
Dans cet exercice on notera n le nombre de nœuds d'un arbre binaire et h sa hauteur.
Tous les arbres considérés seront supposés non vides.
Quel est le nombre maximal de feuilles d'un arbre de hauteur h ?
Quel est le nombre maximal de nœuds d'un arbre de hauteur h ?
Quelle est la hauteur maximale d’un arbre à n nœuds ?
Quelle est la hauteur minimale d’un arbre de n nœuds ?
Exercice 2 :
Ecrire une fonction récursive (compter_noeuds (Arbre arbre): entier) qui retourne le
nombre de nœuds dans un arbre binaire.
Exercice 3 :
Ecrire une fonction récursive (compter_feuilles (Arbre arbre): entier) qui retourne le
nombre de feuilles dans un arbre binaire.
Exercice 4 :
Un parcours d’arbre est une façon d'ordonner les nœuds d'un arbre afin de les parcourir.
On distingue essentiellement deux types de parcours : le parcours en largeur et les
parcours en profondeur. Parmi les parcours en profondeur, on distingue à nouveau le
parcours préfixe, le parcours infixe et le parcours suffixe.
Le parcours préfixe traite la racine, puis le sous-arbre gauche puis le droit.
Le parcours infixe traite le sous-arbre gauche, puis la racine, puis le droit.
Le parcours suffixe (postfixe) traite d’abord les sous-arbres gauche, puis droit, pour
terminer par la racine de l’arbre.
Représentez l’expression : (2 + 5) - (4 + ((4 - 7) + 6)) sous forme d’un arbre binaire.
Ecrire l'expression précédente :
a. sous forme préfixée.
b. sous forme postfixée.
Même question pour les deux expressions suivantes :
((7 + 3) – 1) + (2 * (4 - 5))
((4 + (7 – 8)) + 6) * (((4 – 9) + 7) * 6)
Les arbres sont particulièrement adaptés à l’usage de la récursivité, écrire les procédures
suivantes en récursif :
affichagePrefixe (Arbre a); affichant un arbre en ordre préfixe ;
affichageInfixe (Arbre a); affichant un arbre en ordre infixe :
affichageSuffixe (Arbre a); affichant un arbre en ordre suffixe.
Téléchargement