Vous êtes sur la page 1sur 4

Lycée Mohamed 5 – CASA Pr.

Salsabila BENGHAZOUANI

TD 3
Arbres binaires : implémentation Python,
programmation récursive

Dans ce TD, nous allons implémenter des arbres binaires en Python. On choisit
de représenter l’arbre vide par la liste vide, et un arbre de racine étiquetée par e et
fils fg et fd par la liste [e, fg, fd]
Exercice 1 — Pour se mettre en route
Représenter (crayon/papier !) les arbres définis respectivement en Python via :
a0 = [15, [], []]
a1 = [18, [12, [], [17, [], []]], [30, [15, [], []], []]]
a2 = [19, [42, [], [17, [10, [], []], []]], [15, [35, [], []], [12, [], []]]]

Exercice 2 — Fonctions de base sur les arbres en Python


Toutes les fonctions seront testées sur les trois arbres vus au premier
1. Ecrire une fonction calculant la hauteur d’un arbre.
>>>hauteur(a1)
2
>>> list(map(hauteur, [a0, a1, a2]))
[0, 2, 3]

2. Ecrire une fonction calculant le nombre de nœuds d’un arbre binaire.

>>> list(map(nb_noeuds, [a0, a1, a2]))


[1, 5, 7]

3. Ecrire une fonction calculant le nombre de feuilles d’un arbre binaire.

>>> list(map(nb_feuilles, [a0, a1, a2]))


[1, 2, 3]

1
Lycée Mohamed 5 – CASA Pr.Salsabila BENGHAZOUANI

4. Étant donné un arbre binaire, trouvez la somme de toutes les feuilles.


exemple

somme_feuilles(abr)
La somme des nœuds feuilles est : 15
5. Écrivez une fonction qui retourne vrai si l'arbre binaire donné est SommeEnfants sinon faux.
Un SommeEnfants est un arbre binaire où la valeur d'un nœud est égale à la somme des nœuds
présents dans son sous-arbre gauche et son sous-arbre droit.

Un arbre vide est SommeEnfants et la somme d'un arbre vide peut être considérée comme 0.
Un nœud feuille est également considéré comme SommeEnfants.

Exemple

SommeEnfants(a)
True

2
Lycée Mohamed 5 – CASA Pr.Salsabila BENGHAZOUANI

Exercice 3 — Parcours d’arbre

On va calculer de façon récursive la liste des étiquettes d’un arbre. Le principe est toujours le
même : accoler l’étiquette de la racine, les étiquettes du fils gauche, et celles du fils droit.
Mais dans quel ordre ?
— dans le parcours infixe, l’étiquette de la racine est au milieu ;
— dans le parcours préfixe, elle est au début ;
— dans le parcours suffixe, elle est à la fin.
Par exemple, pour l’arbre a1, ces parcours sont respectivement :
[12, 17, 18, 15, 30] [18, 12, 17, 30, 15] [17, 12, 15, 30, 18]

1. Ecrire une fonction récursive retournant la liste des étiquettes d’un arbre,
parcouru de façon infixe.
On pourra concaténer des listes via l’opérateur +

>>> list(map(parcours_infixe, [a0, a1, a2]))


[[15], [12, 17, 18, 15, 30], [42, 10, 17, 19, 35, 15, 12]]

2. Recommencer avec le parcours préfixe, puis avec le suffixe.

Exercice 4 — Arbres complets


Ecrire une fonction créant un arbre complet (tous les niveaux sont remplis) d’une
hauteur donnée. On s’efforcera de distribuer des étiquettes de façon injective.
´
>>> complet(2)
[1, [2, [4, [], []], [5, [], []]], [3, [6, [], []], [7, [], []]]]

Exercice 5 — Miroir
Ecrire une fonction calculant le miroir d’un arbre donné (au sens d’une symétrie par
rapport `a un axe vertical ).

>>> miroir(complet(2))
[1, [3, [7, [], []], [6, [], []]], [2, [5, [], []], [4, [], []]]]

Exercice 6 — Parcours infixe linéaire


On va reprendre l’exercice 3 en s’interdisant d’utiliser la concaténation de liste :
la seule opération autorisée est l’adjonction en queue de liste liste.append(...)

Le principe est de faire évoluer une liste passée en paramètre, et qui contient les
étiquettes rencontrées jusqu’ici.

1. Ecrire une fonction infixe_entasse prenant en entrée un arbre et une liste, de sorte que
l’appel infixe_entasse(a, debut) ajoute successivement dans la liste debut les étiquettes
rencontrées dans l’arbre a (de façon infixe) ; rien n’est renvoyé.

2. En déduire une fonction infxe_lineaire calculant la liste infixe des étiquettes d’un
arbres en ne réalisant que des append.

3
Lycée Mohamed 5 – CASA Pr.Salsabila BENGHAZOUANI

Exercice 7 —
1. Quelle est la hauteur maximale d’un arbre binaire à n nœuds ?
2. Quel est le nombre maximal de feuilles d’un arbre de hauteur h ?
3. Quel est le nombre maximal de nœuds d’un arbre de hauteur h ?
4. Quelle est la hauteur minimale d’un arbre de n nœuds ?
5. Quel est le nombre maximal de nœuds au niveau k dans un arbre binaire ?
6. Quelle est la particularité du nombre de nœuds des arbres binaires complets ? (Rmq : un
arbre binaire complet est soit une feuille soit un nœud dont les deux fils sont des arbres
binaires complets.)
7. Quel est le nombre de feuilles d’un arbre binaire complet à n nœuds ?

Exercice 8 —
Un arbre équilibré permet de conserver une complexité algorithmique constante pour
certaines opérations. Or l'équilibre de l'ABR n'est pas garanti. Il existe d'autres structures
d'arbres pour ça.
Pourtant on vous demande dans certains tests de vérifier que votre ABR est équilibré.
La définition communément admise de l'équilibre d'un arbre est que la hauteur des deux sous-
arbres de chaque nœud ne peut excéder 1.

Vous aimerez peut-être aussi