Vous êtes sur la page 1sur 9

Travaux dirigés n°6 - Arbres binaires

Durée : 3h

Objectifs

Le but de ce TD est de bien maîtriser les notions vues en cours concernant les arbres binaires ainsi que la
notion de récursivité.
A la fin de ce TD, l’étudiant sera capable de :

- Manipuler les arbres binaires et les arbres binaires de recherche.


- Déterminer les différents parcours d’un arbre binaire.
- Distinguer les arbres binaires de recherche.
- Faire des opérations simples et complexes sur les arbres binaires.
- Résoudre des problèmes réels en utilisant les arbres binaires.
- et

Partie 1 : Arbres binaires

Exercice 1

Soit l’arbre binaire suivant :

Questions :

1) Déterminer la taille et la profondeur de cet arbre.


2) Donner les différents parcours (infixé, préfixé et post-fixé) pour cet arbre binaire.

Réponse
1) Taille = 10 et Profondeur = 3
2) Les parcours :
 Parcours infixé : DBFEAICHGJ
 Parcours préfixé : ABDEFCIGHJ
 Parcours post-fixé : DFEBIHJGCA
Exercice 2

Écrire une fonction qui calcule la somme des valeurs des nœuds dans un arbre binaire de réels.

Réponse

Procédure Somme (A :arbre, som :réel)

Début

Si A< > Nil alors

Som ← som + A↑.info

Somme (A↑.fg, som)

Somme (A↑.fd, som)

FinSi

FinSomme

Ou :
Fonction Somme (A :arbre) :réel

Début

Si A = Nil alors

Retourner 0

Sinon

Retourner A↑.info + Somme (A↑.fg) + Somme (A↑.fd)

FinSi

FinSomme

Exercice 3

On représente une expression arithmétique par un arbre dont les nœuds sont des opérateurs ou
des nombres et dont les feuilles sont des nombres.

Exemple : l’arbre associé à l’expression (2∗5) + (6/7).


1) Écrire les structures de données permettant de représenter une expression arithmétique sous
forme d’un arbre.
Réponse
Types
nœud : Enregistrement
info : caractère
fd, fg : ↑nœud
FinEnregistrement
arbre : ↑nœud

2) Écrire une fonction d’évaluation d’une expression arithmétique sous forme d’un arbre.

Réponse
Fonction Evaluer (A : arbre) : entier
Var
x, y : entier
Début
Si estfeuille(A)=vrai et A↑.info dans [0..9] alors
retourner A↑.info - 48
Sinon
x←evaluer(A↑.fg)
y←evaluer(A↑.fd)
si A↑.info = ʹ+ ʹ alors
retourner x+y
sinon
si A↑.info = ʹ - ʹ alors
retourner x-y
sinon
si Ainfo = ʹ * ʹ alors
retourner x*y
sinon
retourner x/y
FinSi
FinSi
FinSi
FinSi
FinEvaluer

3) Écrire une fonction d’écriture d’une expression arithmétique sous la forme parenthésée à
partir d’un arbre.

Réponse
1) Procédure ExpArithmetique(A :arbre)
Début
Si (A< > Nil) alors
Ecrire (" ( ")
Exp_arithmetique(A↑.fg)
Ecrire(A↑.info)
Exp_arithmetique(A↑.fd)
Ecrire (" ) ")
FinSi
FinExpArithmetique

Partie 2 : Arbres binaires de recherche

Exercice 4

Soient les arbres binaires suivants :

1) Déterminer, parmi ces arbres, ceux qui sont des arbres binaires de recherche.
Réponse
A4 et A6

2) Donner les différents parcours (infixé, préfixé et post-fixé) de ces derniers. Quel
parcours donne-t-il l’arbre trié par ordre croissant ?
Réponse
- Pour l’arbre A4
o Parcours infixé : 2-3-4-8-9-10
o Parcours préfixé : 9-3-2-4-8-10
o Parcours post-fixé : 2-8-4-3-10-9
- Pour l’arbre A6
o Parcours infixé : 8-10-20-22-25-27-32-35-37
o Parcours préfixé : 22-10-8-20-35-27-25-32-37
o Parcours post-fixé : 8-20-10-25-32-27-37-35-22
→ Le parcours qui donne l’arbre binaire de recherche trié par ordre croissant est le
parcours infixé.

Exercice 5

Combien y a-t-il d’arbres binaires de recherche dont les éléments sont {3, 5, 8, 12}?

Réponse
Exercice 6

Insérer successivement les entiers 7, 2, 9, 0, 5, 6, 8 et 1 dans un arbre binaire de recherche


initialement vide. Que devient cet arbre après suppression de 2 puis de 7 ?

Réponse

L’arbre initial est : Après la suppression de la Après la suppression de la


valeur 2, l’arbre devient: valeur 7, l’arbre devient:

Exercice 7

1) Ecrire une procédure ConversionListeArbre qui construit un arbre binaire de


recherche à partir d’une liste d’entiers.

Exemple : L = (12, 14, 10, 6, 5, 20, 7, 13, 15)

12

10 14

6 13 20

5 7 15
Réponse

Procédure conversionListeArbre(Var A :arbre, L :liste)


Var q
nouv : arbre
Début
Si (L = Nil) alors
A←Nil
Sinon
Si (A=Nil) alors
Allouer(nouv)
nouv↑.info ← L↑.info
nouv↑.fd←Nil
nouv↑.fg←Nil
A←nouv
Sinon
Si (L↑.info ≤ A↑.→info) alors
conversionListeArbre(A↑.fg,L)
sinon
conversionListeArbre(A↑.fd,L)
FinSi
conversionListeArbre(A,L↑.suivant)
FinSi
FinSi
FinConversionListeArbre

2) Ecrire une procédure ConversionArbreListe qui crée une liste triée par ordre
croissant à partir de l’arbre binaire de recherche déjà construit.

Exemple : La liste triée qui correspond à l’arbre précèdent est :

Ltrié = (5, 6, 7, 10, 12, 13, 14, 15, 20)


Réponse
Procédure conversionArbreListe (A : arbre, L :liste)
Début
Si (A=Nil) alors
L←Nil
Sinon
conversionArbreListe(A↑.fg,L)
inserer_queue(L, A↑.info)
conversionArbreListe(A↑.fd,L)
FinSi
FinConversionArbreListe

Vous aimerez peut-être aussi