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.