Feuille2: Arbres binaires de recherche CPP 2A, Semestre 2

publicité
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) où x est un entier et où l et r sont eux-même deux arbres binaires
d’entiers.
Voir l’exemple de la figure 1.
6
t = (
((() , 1 , ()) , 2 , (() , 4 , ())) ,
6,
(() , 8 , (() , 9 , ()))
)
8
2
1
∅
∅
4
∅
∅
∅
9
∅
∅
Figure 1: Un arbre binaire t en 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 sumall ( t ):
if t == ():
return 0
(l , x , r ) = t
return sumall ( l )+ x + sumall ( 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. 6 pour 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. 3 pour 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 1 4 9 pour 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) où l et r sont eux-même deux BST et où x est 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 proportionnel à 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 x sera é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 t non vide, calcul d’un couple (tm, m) où m est l’entier maximum de t et tm est
un BST qui représente t privé 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édemment) en utilisant la question précédente.
2
Téléchargement