C5.4 : Implémentation des arbres à l'aide de classes
Implémentation des arbre binaires
Code de la classe
On choisit d'implémenter les arbres binaires à l'aide de la classe Arbre ci-dessous.
class Arbre:
def __init__(self, etiquette):
self.__valeur = etiquette
self.__gauche = None
self.__droit = None
def get_v(self):
return self.__valeur
def get_g(self):
return self.__gauche
def get_d(self):
return self.__droit
def est_feuille(self):
return not self.__gauche and not self.__droit
def greffe_gauche(self, arbre_greffe):
self.__gauche = arbre_greffe
def greffe_droit(self, arbre_greffe):
self.__droit = arbre_greffe
Avec cette classe, l'arbre ci-contre se construit avec les lignes suivantes :
arb = Arbre("S")
n = Arbre("N")
i = Arbre("I")
arb.greffe_gauche(n)
arb.greffe_droit(i)
Q1 : Écrire le code qui permet de construire l'arbre ci-dessous :
Parcours infixe
Q2 : Écrire une fonction récursive qui permet de placer toutes les étiquettes d'un arbre dans une liste avec un parcours infixe. Tester votre fonction sur l'arbre précédent.
Implémentation des arbres binaires de recherche
Q3 : Sur le modèle de la classe Arbre ci-dessus, écrire une classe ABR dont l'interface est décrite ci-dessous.
- Constructeur : identique à celui de la classe Arbre.
- Méthodes get_v : identique à celle de la classe Arbre.
- Méthodes contient(self, val) : renvoie True si l'un des nœud contient val.
- Méthodes ajoute(self, val) : ajoute val à l'ABR de telle façon qu'il reste un ABR.
- Méthodes parcours_infixe(self, val) : renvoie une liste avec les valeurs des nœuds de l'ABR parcouru dans l'ordre infixe.
Remarque : les méthodes greffe_gauche et greffe_droite disparaissent.