Vous êtes sur la page 1sur 2

Lycée Mohamed 5 – CASA Pr.

Salsabila BENGHAZOUANI

TD 4
ABR : exercices, implémentation Python

Exercice 1 — Trois exemples


Représenter graphiquement les arbres définis de la façon suivante sous Python :
a1 = [25, [], []]
a2 = [18, [12, [], [17, [], []]], [30, [15, [], []], []]]
a3 = [18, [12, [], [17, [], []]], [30, [19, [], []], []]]
Ces arbres binaires sont-ils de recherche ?

Exercice 2 — Recherche dans un ABR


Ecrire une fonction réalisant la recherche d’une étiquette dans un arbre binaire de
recherche.

>>> cherche(25, a1), cherche(17, a1)


(True, False)
>>> cherche(12, a2), cherche(15, a2)
(True, False)
>>> cherche(17, a3), cherche(19, a3), cherche(42, a3)
(True, True, False)

Exercice 3 — Insertion aux feuilles


Ecrire une fonction réalisant l’insertion aux feuilles d’une étiquette dans un arbre (si
cette étiquette est absente).

Attention, cette fonction ne doit rien retourner, mais modifier l’arbre passé en paramètre.
a4 = []
for x in [18, 12, 30, 17, 15]:
inserer_feuilles(x, a4)
print(a4)
-> [18, [12, [], [17, [15, [], []], []]], [30, [], []]]

Exercice 4 — Insertions successives


Ecrire une fonction réalisant les insertions successives d’une liste d’étiquettes aux
feuilles d’un arbre initialement vide.
>>> insertions_successives_feuilles([18, 12, 30, 17, 15])
[18, [12, [], [17, [15, [], []], []]], [30, [], []]]

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

Exercice 5 — Suppression d’une étiquette


Pour supprimer la racine d’un ABR, il faut déjà récupérer (et supprimer !) la plus
grande étiquette du fils gauche (ou symétriquement...).
1. Ecrire une fonction prenant en entrée un ABR non vide, et dont le rôle est
d’une part de supprimer la plus grande étiquette de cet ABR (qui est donc
modifié), et d’autre part de la renvoyer.
2. En déduire une fonction permettant de supprimer une étiquette (si elle
est présente) dans un ABR.
a = insertions_successives_feuilles([30, 20, 23, 33, 40, 31, 32, 25, 17, 22])
print(a)
for e in [32, 30, 20, 17]:
supprimer(e, a)
print(a)
"""
[30, [20, [17, [], []], [23, [22, [], []], [25, [], []]]], [33, [31, [], [32,
[], []]], [40, [], []]]]
[30, [20, [17, [], []], [23, [22, [], []], [25, [], []]]], [33, [31, [], []],
[40, [], []]]]
[25, [20, [17, [], []], [23, [22, [], []], []]], [33, [31, [], []], [40, [],
[]]]] [25, [17, [], [23, [22, [], []], []]], [33, [31, [], []], [40, [], []]]]
[25, [23, [22, [], []], []], [33, [31, [], []], [40, [], []]]] """

Exercice 6 — Tri externe avec un ABR


Ecrire une fonction prenant en entrée une liste d’entiers et renvoyant une nouvelle liste
contenant les même entiers mais dans l’ordre croissant, en commençant par les placer dans un
ABR puis en parcourant cet ABR en ordre infixe.
Complexité dans le pire des cas ? Peut-on faire mieux ?
>>> tri_ext([14, 30, 17, 2, 2017, 42, 17])
[2, 14, 17, 30, 42, 2017]

Exercice 7 — Cet arbre est-il de recherche ? Avec un parcours infixe


Une arbre binaire est de recherche si et seulement si le parcours infixe des
étiquettes fournit une liste croissante.
Utiliser cette propriété pour tester le fait qu’un arbre binaire est de recherche ou non.
>>> [test_ABR_bis(a) for a in [a1, a2, a3]]
[True, False, True]

Vous aimerez peut-être aussi