Aller au contenu

Devoir sur les arbres binaires

L'usage de la calculatrice n'est pas autorisé.

Durée : 1 heure

Dans tout le devoir, on utilisera la classe Noeud vue en classe:

class Noeud:
    def __init__(self, *args):
        if len(args) == 0:
            self.contenu = None
        else:
            self.contenu = (args[0], args[1], args[2])
    def etiquette (self):
        return(self.contenu[0])
    def gauche(self):
        return(self.contenu[1])
    def droit(self):
        return(self.contenu[2])
    def est_vide(self):
        return  self.contenu == None

Exercice 1

Soit l'arbre binaire suivant:

Écrire une commande qui permet de déclarer cet arbre.

A=Noeud(1,Noeud(2,Noeud(3,Noeud(),Noeud()),Noeud(4,Noeud(),Noeud())),Noeud(5,Noeud(),Noeud()))

Exercice 2

Donner 3 arbres de taille 3, différents, dont les noeuds contiennent les étiquettes 1, 2, 3 et pour lesquels la fonction parcours_postfixe affiche:

1
2
3

graphiques

Exercice 3

Écrire une fonction récursive qui renvoie True si un arbre est filiforme et False sinon.

def est_filiforme(A):
    if A.est_vide():
        return True
    else:
        if A.gauche().est_vide():
            return est_filiforme(A.droit())
        if A.droit().est_vide():
            return est_filiforme(A.gauche())
        return False

Exercice 4

On dit qu'un arbre est un peigne gauche si le fils droit de chaque noeud est vide. On définit de même les peignes droits.

Écrire une fonction peigne qui retourne le peigne gauche de taille \(n\) donnée. Pour les valeurs on prendra les entiers de \(1\) à \(n\).

def peigne(n):
    if n==1:
        return Noeud(1,Noeud(),Noeud())
    else:
        return Noeud(n,peigne(n-1),Noeud())

Exercice 5

Écrire une fonction SommeInterne qui retourne la somme des étiquettes non feuilles dans l’arbre.

def SommeInterne(A):
    if A.est_vide():
        return 0
    if A.gauche().est_vide() and A.droit().est_vide():
        return 0
    else:
        return A.etiquette()+SommeInterne(A.gauche())+SommeInterne(A.droit())