Correction TP 5 :Types de donn´ees abstraits arbre
Licence 2 MASS semestre 2, 2007/2008
Exercice 1 : Arbre de Nombres
a- Algorithme somme(a: arbre) : entier
ebut
si arbreEstVide?(a)alors
retourner 0
sinon
retourner racine(a) + somme(arbreGauche(a)) + somme(arbreDroit(a))
fin si
fin
b- Algorithme maximum(a: arbre) : entier
ebut
si arbreEstVide?(a)alors
retourner 0
sinon
retourner max2(racine(a), max2(maximum(arbreGauche(a)), maximum(arbreDroit(a))
))
fin si
fin
Il faut pour cet algorithme des nombres au dessus de 0. Je propose d’autres
algorithmes :
Algorithme maximumR(a: arbre) : entier
ebut
si arbreEstVide?(a)alors
retourner 0
sinon
si arbreEstVide?(arbreGauche(a)) alors
si arbreEstVide?(arbreDroit(a)) alors
retourner racine(a)
sinon
retourner max2(racine(a), maximumR(arbreDroit(a)) )
fin si
sinon
si arbreEstVide?(arbreDroit(a)) alors
retourner max2(racine(a), maximumR(arbreGauche(a)) )
sinon
retourner max2(racine(a), max2(maximumR(arbreGauche(a)),
maximumR(arbreDroit(a)) ))
fin si
1
fin si
fin si
fin
Ou encore une ecursivit´e terminale :
Algorithme maximumIter(a: arbre, m: r´eel) : entier
ebut
si arbreEstVide?(a)alors
retourner m
sinon
si racine(a)< m alors
retourner max2(maximumIter(arbreGauche(a), m), maximumIter(arbreDroit(a),
m) )
sinon
retourner max2(maximumIter(arbreGauche(a), racine(a)), maximumIter(arbreDroit(a),
racine(a)) )
fin si
fin si
fin
Avec :
Algorithme maximumI(a: arbre) : entier
ebut
si arbreEstVide?(a)alors
retourner 0
sinon
retourner maximumIter(a, racine(a))
fin si
fin
Ou encore pour r´egler le cas de la valeur par d´efault :
Algorithme maximumDef(a: arbre, valeurDefaut : entier) : entier
ebut
si arbreEstVide?(a)alors
retourner valeurDefaut
sinon
retourner max2(racine(a), max2(maximum(arbreGauche(a)), maximum(arbreDroit(a))
))
fin si
fin
avec :
Algorithme maximumD(a: arbre) : entier
ebut
si arbreEstVide?(a)alors
retourner 0
sinon
2
retourner maximumDef(a, racine(a))
fin si
fin
Exercice 2 : Propri´et´es d’un arbre
a- Algorithme nbNoeud(a: arbre) : entier
ebut
si arbreEstVide?(a)alors
retourner 0
sinon
retourner 1 + nbNoeud(arbreGauche(a)) + nbNoeud(arbreDroit(a))
fin si
fin
b- Algorithme hauteur(a: arbre) : entier
ebut
si arbreEstVide?(a)alors
retourner 0
sinon
retourner 1 + max2(hauteur(arbreGauche(a)), hauteur(arbreDroit(a)
))
fin si
fin
o`u max2 retourne le maximum de 2 nombres en param`etre
Exercice 3 : Parcours
a-
orage
bleus
diamant temps
fleur
or patiente voyage
b- ǫest le mot vide
Algorithme prefixe(a: arbre) : mot
ebut
si arbreEstVide?(a)alors
retourner ǫ
sinon
retourner concat(racine(a), concat(arbreGauche(a), arbreDroit(a)))
fin si
fin
3
Algorithme infixe(a: arbre) : mot
ebut
si arbreEstVide?(a)alors
retourner ǫ
sinon
retourner concat(arbreGauche(a), concat(racine(a), arbreDroit(a)))
fin si
fin
Algorithme postfixe(a: arbre) : mot
ebut
si arbreEstVide?(a)alors
retourner ǫ
sinon
retourner concat(arbreGauche(a), concat(arbreDroit(a), racine(a)))
fin si
fin
c- pr´efixe : oragediamantblausorfleurtempspatientevoyage
infixe : bleusdiamantfleurororagepatientetempsvoyage
postfixe : bleusfleurordiamantpatientevoyagetempsorage
Exercice 4 : Filtre
a- Algorithme extraitMots(a: arbre) : arbre
ebut
si arbreEstVide?(a)alors
retourner arbreVide()
sinon
si lettre(racine(a), 0) = ’m’ alors
retourner arbreCons(”mama”, extraitMots(arbreGauche(a)), extraitMots(arbreDroit(a)))
sinon
retourner arbreCons(racine(a), extraitMots(arbreGauche(a)), extraitMots(arbreDroit(a)))
fin si
fin si
fin
4
Exercice 5 : Recherche
a-
5512 78
54
22
30 51
32
61
b- Algorithme recherche(a: arbre d’entier, n: entier) : booleen
ebut
si arbreEstVide?(a)alors
retourner faux
sinon
si racine(a) = nalors
retourner vrai
sinon
si racine(a)< n alors
retourner recherche(arbreDroit(a), n)
sinon
retourner recherche(arbreGauche(a), n)
fin si
fin si
fin si
fin
Le nombre de comparaisons est au plus la hauteur de l’arbre.
c- Algorithme maximum(a: arbre d’entier) : entier
ebut
si arbreEstVide?(a)alors
retourner 0
sinon
si arbreEstVide?(arbreDroit(a)) alors
retourner racine(a)
sinon
retourner maximum(arbreDroit(a))
fin si
fin si
5
1 / 7 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !