1.2. LES LISTES BINAIRES GAUCHES 3
Question 2. — Afin de tester le constructeur écrit la question précédente, enrichir la
classe Node d’une méthode to_list(self)qui renvoie la liste des étiquettes dans
l’ordre préfixe (sous forme de liste Python de type list.).
Vérifier, à minima, que votre code fonctionne sur les tests suivants :
Entrée Sortie
a1[92]
a2[34,23,11]
a3[28,40,33,12,27,7,55]
Dans le reste du sujet, il est interdit d’utiliser to_list(self), sauf à des fins de
test.
Question 3. — Enrichir la classe Node d’une méthode __contains__(self, item)
qui renvoie le booléen Vrai si item est l’une des étiquettes de l’arbre self.
Vérifier que, si test de type Node, on peut désormais appeler directement xin t.
Vérifier que l’élément 0n’appartient pas aux arbres a1,a2et a3. Pour chaque
élément xde a1,a2et a3, vérifier qu’il appartient à l’arbre.
Question 4. — Enrichir la classe Node d’une méthode __len__(self)qui renvoie le
cardinal de self, c’est-à-dire le nombre de sommets.
Vérifier que, si test de type Node, on peut désormais appeler directement len(t).
Vérifier que le cardinal de a1vaut 1, le cardinal de a2vaut 3, le cardinal de a3
vaut 7.
Question 5. — Enrichir la classe Node d’une méthode __getitem__(self, key) qui
renvoie l’élément nokey quand on parcourt self dans l’ordre préfixe. Si key n’appar-
tient pas à l’intervalle J0,len(self)J, une exception est levée à l’aide de l’instruction
raise IndexError("complete tree index out of range").
Vérifier que, si test de type Node et kest un entier, on peut désormais utiliser
directement la syntaxe t[k] pour des lectures.
Remarque 1.1.— Grâce à l’existence de __getitem__(self, key), Python se
débrouille même pour créer des itérateurs. Vérifier que l’on peut désormais utiliser la
syntaxe de boucle « for vin t: ». Dans la partie 3, nous tenterons de mieux faire
que des accès par indices pour itérer.
Remarque 1.2.— Pour modifier un terme de l’arbre avec la syntaxe la syntaxe
t[k] =x, il nous faudrait écrire une méthode __setitem__(self, key). Nous ne le
faisons pas ici car nous souhaitons que notre structure soit persistante.
1.2. Les listes binaires gauches
Définition 1.3.— Une liste binaire gauche est une suite simplement chaînée
d’arbres étiquetés complets a1:: a2:: ···:: atde hauteurs telles que
(z)h(a1)h(a2)<h(a3)<h(a4)<···<h(at).
(La première inégalité est large, les suivantes sont toutes strictes). Les éléments d’une
liste binaire gauche sont rangés : il y a d’abord les éléments de a1dans l’ordre préfixe,