Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Les Arbresbinaure de Recherche2017+suppression

Télécharger au format doc, pdf ou txt
Télécharger au format doc, pdf ou txt
Vous êtes sur la page 1sur 6

1 ére année Master Module: algorithmiques et structures complexes

Chapitre 3: Les arbres binaires de recherche

1. Définition
Un arbre binaire de recherche est un arbre binaire vérifiant la propriété suivante :
Soit x, y deux nœuds de l'arbre, si y est un nœud de sous-arbre gauche de x alors inf(x) > inf(y), si y
est un nœud de sous-arbre droit de x, alors inf(y)>inf(x).

2. Quelques opérations effectuées sur les arbres binaires de recherches

2.1 Recherche
/ / Recherche d'un élément

Static ArbreBR recherche(ArbreBR A, int x){

If (A==null) return null;

else if (A.x==x) return A;

else if (x>A.x) return recherche(A.D, x);

else return recherche(A.G, x);

2.2 Min/ Max


//Min et Max
1 ére année Master Module: algorithmiques et structures complexes

Static ArbreBR Min(ArbreBR A){

If (A==null) return null;

else if (A.G==null) return A;

else return Min(A.G);

Static ArbreBR Max(ArbreBR A){

If (A==null) return null;

else if (A.D==null) return A;

else return Max(A.D);

2.3 Successeur / Prédécesseur


// Successeur et prédécesseur

Static ArbreBR Succ(ArbreBR A, int x){

ArbreBR r= recherche(A, x);

If (r==null) return null;

else if (r.D==null) return null;

else return Min(r.D);

Static ArbreBR Pred(ArbreBR A, int x){

ArbreBR r=recherche(A,x);

If (r==null) return null;

else if (r.G==null) return null;

else return Max(r.G);

2.4 Insertion
//Insertion

Static ArbreBR Insert(ArbreBR A, int x){


1 ére année Master Module: algorithmiques et structures complexes

ArbreBR A1=new ArbreBR(x, null, null);

ArbreBR A2=null, A3=A;

while(A3!=null){

A2=A3;

If (x< A3.x) A3=A3.G;

else A3=A3.D;

If (A==null) A=A1;

else if (A2.x>x)A2.G=A1;

else A2.D=A1;

return A;

2.5 La suppression

La suppression d’une clé dans un arbre est une opération plus complexe. Elle s’accompagne
de la suppression d’un nœud. Soit s le nœud qui porte la clé x à supprimer. Trois cas sont à
considérer selon le nombre de fils du nœud x:

 si le nœud s est une feuille, alors on l’élimine;


 si le nœud s possède un seul fils, on élimine s et on « remonte » ce fils.
 si le nœud s est une feuille, alors on l’élimine;
 si le nœud s possède un seul fils, on élimine s et on « remonte » ce fils.
 si le nœud s possède deux fils, on cherche soit le minimum de s.filsD (ou bien le max
de s.filsG). On remplace le contenu de s par le contenu de ce min ou de ce max.
Exemples
Cas 1 : suppression de la clé 13 par élimination d’une feuille.
1 ére année Master Module: algorithmiques et structures complexes

Cas 2: Suppression de la clé 16 par remontée du fils

Cas 3 : Suppression de la clé 15 par substitution de la clé 14 et suppression de ce nœud.

//Suppression d'un nœud

static ArbreBR SuppN(ArbreBR A, int x){

ArbreBR b=A,p=null;

while(b!=null)

if (b.x==x) break;

else {

p=b;

if (b.x>x)b=b.G;

else b=b.D;

if (b!=null)

if (b.G==null && b.D==null)

if (p==null) A=null;

else if (p.G==b) p.G=null;


1 ére année Master Module: algorithmiques et structures complexes

else p.D=null;}

else if (b.G==null || b.D==null){

ArbreBR f;

if (b.G == null) f=b.D;

else f=b.G;

if (p==null) A=f;

else if (p.G==b) p.G=f;

else p.D=f;

else {

ArbreBR m=Min(b.D);

b.x=m.x;

SuppN2(b.D,b,m.x);

return A;

static void SuppN2(ArbreBR A,ArbreBR per, int x){

ArbreBR b=A,p=per;

while(b!=null)

if (b.x==x) break;

else {

p=b;

if (b.x>x)b=b.G;

else b=b.D;

if (b!=null)

if (b.G==null && b.D==null)

{
1 ére année Master Module: algorithmiques et structures complexes

if (p==null) b=null;

else if (p.G==b) p.G=null;

else p.D=null;}

else if (b.G==null || b.D==null){

ArbreBR f;

if (b.G == null) f=b.D;

else f=b.G;

if (p==null) b=f;

else if (p.G==b) p.G=f;

else p.D=f;

Vous aimerez peut-être aussi