Un arbre binaire complet est un arbre qui est plein à chaque niveau de l'arbre, ce qui signifie qu'il n'y a pas place pour un autre nœud à n'importe quel niveau de l'arbre, sauf aux feuilles.
Combien de nœuds y a-t-il dans un arbre binaire complet de hauteur 2 ? de hauteur 3 ? de hauteur 4?
5 * 4 + 3 * 2
. Écrire les notations
préfixe et postfixe de cet arbre.En utilisant la classe ArbreBinaire
définie dans le cours, écrire de façon récursive les
fonctions suivantes qui prennent un seul paramètre de type ArbreBinaire
:
taille(arbre)
renvoie la taille de l'arbre.prefixe(arbre)
affiche les éléments lors du parcours de l'arbre en profondeur dans l'ordre
préfixe.infixe(arbre)
affiche les éléments lors du parcours de l'arbre en profondeur dans l'ordre
infixe.postfixe(arbre)
affiche les éléments lors du parcours de l'arbre en profondeur dans l'ordre
postfixe.En plus: Écrivez un algorithme non récursif pour effectuer une traversée dans l'ordre d'un arbre. (AIDE: Votre algorithme aura besoin d'une pile pour que cela fonctionne.)
Il est possible d'implémenter les arbres binaires avec des tuples (ou listes) imbriqués de longueur 3.
Un arbre vide sera représenté par un tuple vide: ()
.
Un nœud non vide sera représenté ainsi:
0
sera l'étiquette,1
sera le sous-arbre gauche: un tuple éventuellement vide,2
sera le sous-arbre droit: un tuple éventuellement vide.Questions
Construire l'arbre suivant avec cette représentation:
Domaine public, Lien
Implémenter les fonctions suivantes qui prennent en paramètre un arbre binaire représenté sous forme de tuples imbriqués:
taille(arbre)
renvoie la taille de l'arbre.est_vide(arbre)
renvoie True
si l'arbre est vide False
sinon.prefixe(arbre)
affiche les éléments lors du parcours de l'arbre en profondeur dans l'ordre
préfixe.infixe(arbre)
affiche les éléments lors du parcours de l'arbre en profondeur dans l'ordre
infixe.postfixe(arbre)
affiche les éléments lors du parcours de l'arbre en profondeur dans l'ordre
postfixe.On utilise dans cet exercice la classe ArbreBinaire
vue en cours pour représenter les arbres.
Écrire une procédure itérative de parcours_largeur(arbre)
qui affiche les éléments d'un arbre
donné en argument de haut en bas et de gauche à droite(parcours en
largeur).
On donne ci-dessous le pseudo-code issu de l'article Wikipédia anglais sur le parcours d'arbres Breadth First Search en anglais.
levelorder(root)
q ← empty queue
q.enqueue(root)
while not q.isEmpty() do
node ← q.dequeue()
visit(node)
if node.left ≠ null then
q.enqueue(node.left)
if node.right ≠ null then
q.enqueue(node.right)