Vous êtes sur la page 1sur 4

L2 Algorithmique et Structures de Données 2016-2017

Interrogation 2
Durée 45mn
Documents et Téléphones portables sont Interdits
Matricule Nom Prénom Groupe

Exercice 1 (1+ 0.75 + 1.5 + 1 + 1.25


1.25 + 2 = 7.5 points).
points).
Soit R un Arbre Binaire de Recherche (ABR) contenant des entiers. Son parcours en largeur (par niveau)
de gauche à droite donne le résultat suivant : 45, 30, 65, 15, 40, 55, 70, 10, 35, 67
1. Donner la représentation graphique de cet arbre R :

2. L’arbre obtenu R est-il :


a. Strictement binaire ? Non
b. Complet ? Non
c. AVL (équilibré) ? Oui

3. Donner le résultat des parcours en profondeur suivants :


a. Préordre (RGD) 45, 30, 15, 10, 40, 35, 65, 55, 70, 67

b. Préordre inversé 45, 65, 70, 67, 55, 30, 40, 35, 45, 10
(RDG)
c. Inordre (GRD) 10, 15, 30, 35, 40, 45, 55, 65, 67, 70

d. Inordre Inversé 70, 67, 65, 55, 45, 40, 35, 30, 15, 10
(DRG)
e. Postordre (GDR) 10, 15, 35, 40, 30, 55, 67, 70, 65, 45

f. Postordre inversé 67, 70, 55, 65, 35, 40, 10, 15, 30,45

Bon Courage Page 1


(DGR)

4. Supprimer de l’arbre R la valeur 30 puis la valeur 45.


a. Suppression de la valeur 30 (en remplaçant par b. Suppression de la valeur 45 (en remplaçant par
le prédécesseur) le successeur)

5. Ecrire la fonction itérative « parcours_ABRLLC(R : *Tnoeud) : *Maillon » qui permet de retourner


le résultat de parcours de l’arbre sous forme d’une LLC (Liste Linéaire Chaînée
unidirectionnelle).

Parcours_ABRLLC(R : *Tnoeud) : *Maillon


1ère méthode : Parcours préordre
CreerPile(P) ; L nil ;
TQ (R≠Null) ou (non PileVide(P)) faire
TQ (R≠Null) //explorer la branche
// insertion à la fin dans la liste L1
Allouer (S)
aff_val(S, Info(R))
aff_suiv(S, nil)
Si (L=nil) alors //la liste est vide
L ←S // mettre à jour l’entête
Sinon
aff_suiv(Q, S)
Q←S //sauvegarder l’@ du dernier maillon
Empiler (P, R)
R FG(R)
FTQ
Depiler (P, R)

1 Ou insertion au début de la liste L : Allouer (S) ; aff_val(S, x) ; aff_suiv(S, nil) ; aff_suiv(S, L) ; L←S //mettre à jour la tête de
la liste

Aroussi Page 2
R FD(R)
FTQ
Retourner (L)
2ème méthode : Parcours inordre
CreerPile(P) ; L nil ;
TQ (R≠Null) ou (non PileVide(P)) faire
TQ (R≠Null) //explorer la branche
Empiler (P, R)
R FG(R)
FTQ
Depiler (P, R)
// insertion à la fin dans la liste L2
Allouer (S)
aff_val(S, Info(R))
aff_suiv(S, nil)
Si (L=nil) alors //la liste est vide
L ←S // mettre à jour l’entête
Sinon
aff_suiv(Q, S)
Q←S //sauvegarder l’@ du dernier maillon
R FD(R)
FTQ
Retourner (L) ;
3ème méthode : parcours en largeur
Var F:filed’attente; L, P : *Maillon
Debut
L Nil ;
Si R ≠ NIL Alors
Enfiler(F,R);
TQ (Non FileVide(F))
Defiler(F,R);
// insertion à la fin dans la liste L3
Allouer (S)
aff_val(S, Info(R))
aff_suiv(S, nil)
Si (L=nil) alors //la liste est vide
L ←S // mettre à jour l’entête
Sinon

2 Ou insertion au début de la liste L : Allouer (S) ; aff_val(S, x) ; aff_suiv(S, nil) ; aff_suiv(S, L) ; L←S //mettre à jour la tête de
la liste

3 Ou insertion au début de la liste L : Allouer (S) ; aff_val(S, x) ; aff_suiv(S, nil) ; aff_suiv(S, L) ; L←S //mettre à jour la tête de
la liste

Aroussi Page 3
aff_suiv(Q, S)
Q←S //sauvegarder l’@ du dernier maillon
Si FG(R) ≠ NIL Alors Enfiler(F,FG(R));
Si FD(R) ≠ NIL Alors Enfiler(F,FD(R));
FTQ
Retourner (L)
Fin

6. On veut calculer le nombre des entiers pairs et le nombre des entiers impairs dans l’arbre R. Pour
ce faire, on peut utiliser directement l’arbre R ou bien utiliser la liste d’entiers résultant de son
parcours (voir la question 5). Ecrire les procédures récursive
récursives
rsives :
a. « NbrEntiersPairImpairABR » qui permet de calculer le nombre des entiers pairs et le nombre des
entiers impairs dans l’arbre R.
b. « NbrEntiersPairImpairLLC » qui permet de calculer le nombre des entiers pairs et le nombre des
entiers impairs dans la liste L.
a. NbrEntiersPairImpairABR b. NbrEntiersPairImpairLLC
xp ; xi 0 xp ; xi 0
Procédure NbrEntiersPairImpairABR (R : * Tnoeud, Procédure NbrEntiersPairImpairLLC (L : * Tnoeud, Var
Var xp, xi : entier) xp, xi : entier)
1ère méthode : parcours préordre Si (L ≠ Nil) alors
Si (R ≠ Nil) alors Si (Valeur(R)mod 2 = 0) alors xp ++
Si (Info(R)mod 2 = 0) alors xp ++ Sinon xi ++
Sinon xi ++ NbrEntiersPairImpairLLC (suivant (L), xp, xi)
NbrEntiersPairImpairABR (FG(R), xp, xi) FSI
NbrEntiersPairImpairABR (FD(R), xp, xi)
FSI
2ère méthode : parcours inordre
Si (R ≠ Nil) alors
NbrEntiersPairImpairABR (FG(R), xp, xi)
Si (Info(R)mod 2 = 0) alors xp ++
Sinon xi ++
NbrEntiersPairImpairABR (FD(R), xp, xi)
FSI
3ère méthode : parcours postordre
Si (R ≠ Nil) alors
NbrEntiersPairImpairABR (FG(R), xp, xi)
NbrEntiersPairImpairABR (FD(R), xp, xi)
Si (Info(R)mod 2 = 0) alors xp ++
Sinon xi ++
FSI
Bon courage

Aroussi Page 4

Vous aimerez peut-être aussi