On construit le codage en partant du premier élément de la liste. Les autres éléments sont les différences entre deux éléments consécutifs de la liste de départ.
L'écriture de cette fonction peut aussi se faire (de façon plus concise) en utilisant les listes par compréhension :
classNoeud:''' classe implémentant un noeud d'arbre binaire '''def__init__(self,g,v,d):''' un objet Noeud possède 3 attributs : - gauche : le sous-arbre gauche, - valeur : la valeur de l'étiquette, - droit : le sous-arbre droit. '''self.gauche=gself.valeur=vself.droit=ddef__str__(self):''' renvoie la représentation du noeud en chaine de caractères '''returnstr(self.valeur)defest_une_feuille(self):''' renvoie True si et seulement si le noeud est une feuille '''returnself.gaucheisNoneandself.droitisNonedefexpression_infixe(e):s=""#(1)ife.gaucheisnotNone:#(2)s='('+s+expression_infixe(e.gauche)s=s+str(e.valeur)ife.droitisnotNone:#(3)s=s+expression_infixe(e.droit)+")"returns
La variable s va contenir l'expression arithmétique
Si le noeud contient un fils gauche, on construit l'expression associée et on ajoute la valeur du noeud à la suite.
On construit la partie droite de l'expression (si elle existe)
Si on atteint cette ligne, l'expression a été construite en totalité, il reste à la renvoyer. Il ne devrait pas y avoir de if !
Attention
Sujet difficile avec diverses notions du programme (arbre, récursivité) et qui présente de plus un aspect mathématique.
Commentaires