NeoXsysm & DiAboLiK ALGORITHME Pages 1/6
DUT info 1er année
Les Arbres binaires de recherche (ABR)
Un arbre binaire de recherche est un arbre ordonné, on le lit généralement de droite à gauche.
I. Appartenance d’un élément à l’ABR
A. Principe
- On compare la valeur cherchée à la racine
- Si elles sont égales, l’algorithme est terminé
- Si la racine est plus grande que le nombre, on recherche à gauche
- Si la racine est inférieure au nombre, on recherche à droite
5 7 10 12 14 15 18
1 2 3 4 5 6 7
15
18
14
5
10
12
7
10
14
5
18
12
7
15
12
15
7
18
14
10
5
NeoXsysm & DiAboLiK ALGORITHME Pages 2/6
DUT info 1er année
B. Algorithme
Fonction logique appartient (x, racine)
Val TIND x
Val NŒUD *racine
Début
Si racine = NULL
Alors
Retourne Faux
Sinon
Si x = (*racine).info
Alors
Retourne vrai
Sinon
Si x < (*racine).info
Alors
Retourne (appartient(x, (*racine).gauche))
Sinon
Retourne (appartient(x, (*racine).droite))
Finsi
Finsi
Finsi
Fin
II. Parcours d’un ABR
Il s’agit d’un parcours infixé d’arbre.
(Voir chapitre précédent).
III. Insertion dans un ABR
A. Principe
L’algorithme se décompose en deux parties :
- Trouver la place de l’insertion
- Insertion de l’élément
NeoXsysm & DiAboLiK ALGORITHME Pages 3/6
DUT info 1er année
B. Algorithme
Procédure inserabr (racine, elem)
Val NŒUD *racine
Val TIND elem
Var locales
NŒUD *adresse
Début
Adresse place (racine, elem)
Insert (elem, adresse)
Fin
Fonction NŒUD *place(racine, elem)
Val NŒUD *racine
Val TIND elem
Début
Si (elem < (*racine).info) et ((*racine).gauche <> NULL)
Alors
Retourne (place((*racine).gauche, elem))
Sinon
Si (elem > (*racine).info) et ((*racine).droite <> NULL)
Alors
Retourne (place((*racine).droite, elem))
Sinon
Retourne (racine)
Finsi
Finsi
Fin
Procédure creefeuille(elem, feuille)
Val TIND elem
Ref NŒUD *feuille
Début
Feuille nouveau NŒUD
(*feuille).info elem
(*feuille).gauche NULL
(*feuille).droit NULL
fin
NeoXsysm & DiAboLiK ALGORITHME Pages 4/6
DUT info 1er année
procédure insert (elme, adresse)
val TIND elem
ref NŒUD *adresse
var locales
NŒUD *feuille
début
creerfeuille (elem, feuille)
si (*adresse).info < elem
alors
(*adresse).droite feuille
sinon
(*adresse).gauche feuille
finsi
fin
IV. Suppression
A. Principe
L’algorithme peut se décomposer en plusieurs parties :
- Repérer dans l’arbre l’élément à supprimer
- Si l’élément à supprimer est une feuille (NULL dans son père gauche ou droit)
- Si l’élément à supprimer est un nœud non terminal
o Si le nœud interne n’a qu’un fils : on peut remplacer ce nœud par ce fils
o Si le nœud interne à deux fils :
On recherche le plus petit parmi les fils droit de l’élément à
supprimer.
On peut rechercher le plus grand parmi les fils gauche.
Rattachement des sous arbres au plus grand des fils droit de gauche
B. Algorithme
On va écrire deux sous programmes :
- procédure qui
- procédure qui
NeoXsysm & DiAboLiK ALGORITHME Pages 5/6
DUT info 1er année
procédure suppelem(x, racine)
val TIND x
val NŒUD *racine
var locales
NŒUD *adelem, *pere, *precedent
Début
Si racine <> NULL
Alors
/* Recherche de l’élément à supprimer et de son père */
place2(racine, x, adelem, pere)
racine adelem
si (*racine).gauche = NULL et (*racine).droite=NULL
alors
si x < (*pere).info
alors
(*pere).gauche NULL
sinon
(*pere).droite NULL
finsi
laisser(racine)
sinon
si (*racine).gauche = NULL et (*racine).droite <> NULL
alors
si x < (*pere).info
alors
(*pere).gauche (*racine).droite
sinon
(*pere).droite (*racine).droite
finsi
laisser(racine)
sinon
si (*racine).droite = NULL et (*racine).gauche <> NULL
alors
si x < (*pere).info
alors
(*pere).gauche (*racine).gauche
sinon
(*pere).droite (*racine).gauche
finsi
laisser(racine)
sinon
1
2
3
4
5
1 / 6 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 !