TD 1 Corrige
TD 1 Corrige
TD 1 Corrige
Infix 3 + 4 / 2 * 8 - 2 * 3
Postfix 3 4 2 / + 8 2 3 * - *
Deuxi`emement, on va afficher cet arbre en utilisant des parentheses. Notez que les parenth`eses sont important uniquement pour la notation infix.
Pr
efix *( +( 3, /( 4, 2) ) , -( 8, *( 2, 3) ) )
Infix ( ( 3+ ( 4/2 ) ) * ( 8- ( 2*3 ) ) )
Postfix ( ( 3, ( 4, 2)/)+, ( 8, ( 2, 3)*)-)*
5. Considerer la fonction suivante :
procedure afficher( noeud : p_t_noeud )
d
ebut
si NOT(noeud^.gauche = NIL) alors
afficher(noeud^.gauche)
si NOT(noeud^.droite = NIL)alors
afficher(noeud^.droite)
Write(noeud^.contenu);
fin
6. Faites tourner lappel afficher(racine); avec la racine de votre arbre dans un tableau.
Utiliser une nouvelle colonne noeud^ .contenu pour chaque nouvelle variable locale.
noeud .contenu noeud .contenu noeud .contenu noeud .contenu
1er appel
2`eme appel
3`eme appel
4`eme appel
*
+
3
/
noeud .contenu noeud .contenu noeud .contenu noeud .contenu
5`eme appel
6`eme appel
7`eme appel
8`eme appel
4
2
8
noeud .contenu noeud .contenu noeud .contenu
9`eme appel
10`eme appel
11`eme appel
*
2
3
7. Que fait cette procedure ?
Cette proc
edure affiche larbre de la mani`
ere postfix.
3 4 2 / + , 8, 2, 3 * 8. Ecrire une fonction definie par recurrence qui calcule le resultat du terme decrit par cet
arbre binaire. (Demarche : Quelle est la condition darret ? Comment faut-il placer les appels
recurrents ?)
function calculer ( noeud : p_t_noeud ) : integer;
d
ebut
si (noeud^.contenu = +) alors
result := calculer(noeud^.gauche) + calculer(noeud^.droite)
sinon (noeud^.contenu = -) alors
result := calculer(noeud^.gauche) - calculer(noeud^.droite)
sinon (noeud^.contenu = *) alors
2