0% ont trouvé ce document utile (0 vote)
179 vues2 pages

tp8 2

Le document décrit les arbres binaires de recherche, leurs propriétés et plusieurs exercices consistant à écrire des fonctions pour manipuler de tels arbres (création, destruction, affichage, recherche, insertion, suppression de nœuds).

Transféré par

Serhane Ait Ziane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
179 vues2 pages

tp8 2

Le document décrit les arbres binaires de recherche, leurs propriétés et plusieurs exercices consistant à écrire des fonctions pour manipuler de tels arbres (création, destruction, affichage, recherche, insertion, suppression de nœuds).

Transféré par

Serhane Ait Ziane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP 8 : Arbres binaires de recherche

Semaine du 17 Mars 2008


Nous allons implmenter des arbres binaires de recherche (ABR dans la suite) et les oprations
pour les manipuler. Un ABR est tout d'abord un arbre  binaire  : chacun de ses nuds comporte
au plus deux ls. On attache chaque nud une valeur (entire dans ce TP). Enn un ABR est
construit de manire rendre facile la recherche de valeur parmi celles qu'il contient. Pour cela,
on dnit les rgles (inductives) suivantes :

1. toutes les valeurs strictement infrieures celle de la racine sont places dans les nuds du
sous-arbre gauche de la racine ;
2. toutes les valeurs suprieures ou gales celle de la racine sont places dans les nuds du le
sous-arbre droit de la racine ;
3. les sous-arbres gauche et droit de la racine sont aussi des ABR.
La gure 1 montre un exemple d'ABR contenant des entiers.
valeur : 4
droit :
gauche :

valeur : 1
droit :
gauche : NULL

valeur : 6
droit :
gauche :

valeur : 6
droit : NULL
gauche : NULL

valeur : 3
droit : NULL
gauche : NULL

valeur : 9
droit : NULL
gauche :

valeur : 7
droit : NULL
gauche : NULL

Fig.

1  Un arbre binaire de recherche

Remarques :
 durant tout ce TP, le dtail des structures implmenter ainsi que les prototypes exacts des
fonctions ne seront pas donns dans l'nonc. Vous tes donc libres d'utiliser l'implmentation
que vous prfrez (mais il n'y a pas 36 possibilits et il vaut mieux faire simple. . . ) ;
 n'oubliez pas de vrier rgulirement sur des exemples le bon fonctionnement des fonctions
que vous crivez.

Exercice 1

struct

Dnir une structure


noeud_s permettant de coder un nud d'un arbre
binaire contenant une valeur entire. Ajouter des
pour dnir les nouveaux types
noeud_t et arbre_t (ces types devraient permettre de reprsenter une feuille, c'est dire un
arbre vide).

typedef

Exercice 2

crire une fonction cree_arbre() qui prend en argument une valeur entire ainsi
que deux arbres et renvoie un arbre dont la racine contient cette valeur et les deux sous-arbres
sont ceux donns en paramtre.

Exercice 3

crire une fonction (rcursive) detruit_arbre() qui libre la mmoire occupe par
tous les nuds d'un arbre binaire.

Exercice 4

crire une fonction (rcursive) nombre_de_noeuds() qui calcule le nombre de


nuds d'un arbre binaire.

Exercice 5

crire une fonction ache_arbre() qui ache les valeurs des nuds d'un ABR par
ordre croissant (choisissez le bon type de parcours des nuds de l'arbre. . . ).

Exercice 6

crire une fonction ache_arbre2() permettant d'acher les valeurs des nuds
d'un arbre binaire de manire lire la structure de l'arbre. Un nud sera ach ainsi : {g,v,d}
o g est le sous-arbre gauche, v la valeur du nud et d le sous-arbre droit. Par exemple, l'arbre
de la gure 1 sera ach par : {{{_,1,_},3,_},4,{{_,6,_},6,{{_,7,_},9,_}}}. Les '_'
indiquent les sous-arbres vides.

Exercice 7

crire une fonction compare() qui compare deux arbres binaires (la fonction renvoie
une valeur nulle si et seulement si les deux arbres binaires ont la mme structure d'arbre et
qu'ils portent les mmes valeurs aux nuds se correspondant).

Exercice 8

crire une fonction (rcursive. . . ) insere () qui ajoute une valeur dans l'ABR (ce
sera un nouveau nud plac correctement dans l'arbre).

Exercice 9

crire une fonction trouve_noeud() qui renvoie l'adresse d'un nud de l'ABR
donn en paramtre contenant une certaine valeur (ou NULL si cette valeur ne gure pas dans
l'arbre).

Exercice 10  (dicult : )

crire une fonction verie () qui renvoie un entier non nul si


et seulement si l'arbre binaire pass en paramtre est un arbre binaire de recherche. Remarque :
on pourra crire une fonction auxiliaire (rcursive) qui vrie qu'un arbre binaire (non vide)
satisfait les proprits d'ABR et en mme temps dtermine les valeurs minimales et maximales
contenues dans cette arbre binaire (et les renvoie via des pointeurs en argument. . . ).

Exercice 11  (dicult : )

crire une fonction tri () qui trie un tableau d'entiers donn


en argument l'aide d'un arbre binaire de recherche. Remarque : on pourra crire une fonction
auxiliaire rcursive qui, partir d'un sous-arbre d'un ABR et d'une position dans le tableau,
remplit le tableau, partir de la position donne, avec les valeurs contenues dans ce sous-arbre
binaire et renvoie le nombre de valeurs du sous-arbre. . .

Exercice 12  Bonus (dicult : )

crire une fonction supprime() qui supprime une


valeur de l'arbre (on supprimera la premire rencontre) tout en conservant les proprits
d'ABR. L'algorithme est le suivant (une fois trouv le nud contenant la valeur en question) :
 si le nud enlever ne possde aucun ls, on l'enlve,
 si le nud enlever n'a qu'un ls, on le remplace par ce ls,
 si le noeud enlever a deux ls, on le remplace par le sommet de plus petite valeur dans le
sous-arbre droit, puis on supprime ce sommet.

Vous aimerez peut-être aussi