Feuille2: Arbres binaires de recherche
CPP 2A, Semestre 2 – 2016-2017
Dans cette séance, on manipule une structure de données, appelée arbre binaire, qui permet ici de
représenter des suites d’entiers.
Définition 1 Un arbre binaire d’entiers est:
soit le uplet vide () ;
soit un triplet (l,x,r) xest un entier et où let rsont eux-même deux arbres binaires
d’entiers.
Voir l’exemple de la figure 1.
t=(
((() , 1 , ()) , 2 , (() , 4 , ())) ,
6 ,
(() , 8, (() , 9, ()))
)
6
2
1
∅ ∅
4
∅ ∅
8
9
∅ ∅
Figure 1: Un arbre binaire ten Python et sa représentation graphique
On programme des traitements sur les arbres
par récursivité sur la structure. Par exemple, la
fonction sumall ci-contre calcule la somme des
entiers dans l’arbre (e.g. 30 pour l’arbre de la
figure 1).
def s um al l ( t ):
if t == ():
return 0
(l , x , r ) = t
return s um al l ( l )+ x + s um al l ( r )
Exercice 1 Pour chacun des traitements ci-dessous, écrire une fonction Python qui l’effectue en
passant au plus une fois par nœud :
1. calcul du nombre d’entiers dans l’arbre (e.g. 6pour l’arbre de la figure 1) ;
2. calcul de la hauteur de l’arbre, c-à-d. le nombre maximum d’entiers sur une branche de l’arbre
(e.g. 3pour l’arbre de la figure 1) ;
3. calcul de l’entier maximum dans l’arbre sous la précondition que l’arbre est non vide ;
4. affichage de la suite des entiers qui ont deux fils vides (e.g. on veut obtenir 149pour l’arbre
de la figure 1).
1
On contraint maintenant la structure de données afin de ne représenter que des ensembles d’entiers
strictement ordonnés. C’est la notion d’arbre binaire de recherche, ou Binary Search Tree (BST)
en anglais.
Définition 2 Un arbre binaire de recherche ou BST est:
soit l’arbre vide () ;
soit un arbre (l,x,r) let rsont eux-même deux BST et où xest strictement supérieur
(resp. strictement inférieur) aux entiers présents dans l(resp. dans r).
L’arbre de la figure 1 satisfait cette propriété. Par contre, si on échange deux entiers distincts de
cet arbre, l’arbre obtenu ne satisfait pas la propriété.
Exercice 2 Programmer les traitements suivants sur les BSTs :
1. affichage des entiers du BST par ordre décroissant (en un seul parcours de l’arbre) ;
2. calcul de l’entier maximum du BST non vide (avec un nombre d’opérations au plus propor-
tionnel à la hauteur de l’arbre) ;
3. test si un entier donné apparaît dans le BST (même condition de coût que précédemment) ;
4. étant donné un entier x, construction d’un BST qui réalise l’union d’un BST et du singleton
composé de x: l’élément xsera éventuellement une feuille du nouvel arbre (même condition
de coût que précédemment) ; simuler l’exécution de votre fonction en insérant successivement
les entiers suivants à partir de l’arbre vide : 6, 3, 9, 12, 2, 11 ; idem avec : 1, 2, 4,
6, 8, 9 ;
5. étant donné un tableau d’entiers triés par ordre strictement croissant, construction d’un BST
correspondant à son arbre de recherche dichotomique (en un seul parcours du tableau) ;
6. pour un BST tnon vide, calcul d’un couple (tm, m) mest l’entier maximum de tet tm est
un BST qui représente tprivé de m(nombre d’opérations au plus proportionnel à la hauteur
de l’arbre) ;
7. calcul d’un BST qui réalise la suppression d’un élément (même condition de coût que précédem-
ment) en utilisant la question précédente.
2
1 / 2 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 !