Vous êtes sur la page 1sur 5

Algorithmique avancée

TP3 - Arbres Binaires de Recherche


DEUST2
07 novembre 2022

13

3 17

1 6 14 19

4 10 16

11

Rappel : Pour tout élément e de l’arbre :


— les éléments de gauche sont plus petits que e
— les éléments de droite sont plus grands que e
On suppose qu’un arbre binaire de recherche ne contient pas deux fois le même
élément.

1 Représentation d’un noeud


Écrivez la classe Noeud qui représentera un élément de l’arbre. Un noeud dispose
d’une valeur (sa clef) qui sera ici un entier. Il possède aussi une référence vers son
fils gauche et une autre vers son fils droit. Lorsqu’un noeud n’a pas de fils gauche
ou droit, sa référence est null. Attention : vous devez rendre impossible l’existence
d’un noeud où sa clef est plus petite que son fils gauche. Aussi, sa clef ne doit pas
être plus grande que la clef de son fils droit. Pensez au(x) constructeur(s), getter(s)
et setter(s) et n’oubliez pas d’initialiser les attributs. Il peut aussi être utile de
surcharger la méthode toString pour afficher le contenu d’un noeud.
class Noeud {
// ...
}

Création d’un noeud :


Noeud n = new Noeud(15);

1
2 Représentation d’un arbre binaire de recherche
Écrivez la classe ArbreRecherche qui représentera tous les éléments (sommets) d’un
arbre. Pour cela, elle disposera d’une référence vers la racine de l’arbre (premier
élément de celui-ci). Ensuite, créez un arbre binaire de recherche contenant un noeud
racine 13, un fils gauche 3, et un fils droit 17 (comme sur l’exemple précédent). Pensez
au(x) constructeur(s), getter(s) et setter(s) et n’oubliez pas d’initialiser les attributs.
class ArbreRecherche {
// ...
}

Création d’un arbre :


Noeud racine = new Noeud(13)
ArbreRecherche abr = new ArbreRecherche(racine);
// ...

3 Ajouter un noeud
Écrivez la méthode ajouter à la classe ArbreRecherche qui permet d’ajouter un
noeud ayant la clef v au bon endroit dans l’arbre. Écrivez une deuxième méthode
ajouter faisant la même opération mais depuis un objet de type Noeud passé en
paramètre.
public void ajouter(int v);
public void ajouter(Noeud n);

Exemple :
Noeud racine = new Noeud(12);
ArbreRecherche abr = new ArbreRecherche(racine);
arbre.ajouter(45);
arbre.ajouter(12);
arbre.ajouter(5);
arbre.ajouter(22);
Noeud n = new Noeud(99);
arbre.ajouter(n);

4 Maximum
Écrivez la méthode maximum qui retourne la plus grande valeur contenue dans
l’arbre. Si l’arbre est vide, retournez la valeur 42.

2
public int maximum();

Exemple :
Noeud racine = new Noeud(55);
ArbreRecherche abr = new ArbreRecherche(racine);
arbre.ajouter(11);
arbre.ajouter(67);
arbre.ajouter(88);
arbre.ajouter(55);
arbre.ajouter(44);

int max = arbre.maximum();


System.out.println("Le maximum est " + max);
/* Resultat attendu:
Le maximum est 88
*/

5 Minimum
Écrivez la méthode minimum qui retourne la plus petite valeur contenue dans l’arbre.
Si l’arbre est vide, retournez la valeur −42.
public int minimum();

Exemple :
Noeud racine = new Noeud(33);
ArbreRecherche abr = new ArbreRecherche(racine);
arbre.ajouter(5);
arbre.ajouter(44);
arbre.ajouter(-2);
arbre.ajouter(3);
arbre.ajouter(12);

int min = arbre.minimum();


System.out.println("Le minimum est " + min);
/* Resultat attendu:
Le minimum est -2
*/

6 Rechercher un noeud
Écrivez la fonction rechercher qui étant donné un entier v, recherche si il existe un
noeud ayant cette clef dans l’arbre. Cette fonction retourne le noeud trouvé ou null
si celui-ci n’existe pas.
public Noeud rechercher(int v);

Exemple :
Noeud racine = new Noeud(12);
ArbreRecherche abr = new ArbreRecherche(racine);
arbre.ajouter(45);
arbre.ajouter(12);

3
arbre.ajouter(5);
arbre.ajouter(22);
arbre.ajouter(99);

Noeud n = arbre.rechercher(13);
if (n == null) {
System.out.println("Aucun element de l’arbre n’a une clef egal a
13");
} else {
System.out.println("Le noeud 13 a ete trouve !");
}
/* Resultat attendu:
Aucun element de l’arbre n’a une clef egal a 13
*/

Noeud n = arbre.rechercher(99);
if (n == null) {
System.out.println("Aucun element de l’arbre n’a une clef egal a
99");
} else {
System.out.println("Le noeud 99 a ete trouve !");
}
/* Resultat attendu:
Le noeud 99 a ete trouve !
*/

7 Supprimer un noeud
Écrivez la méthode supprimer qui étant donné un entier v, supprime l’élément ayant
la même clef (si il existe) dans l’arbre.
static void supprimer(int v);

Exemple :
// A partir de l’arbre cree a l’exercice precedent.
Noeud racine = new Noeud(12);
ArbreRecherche abr = new ArbreRecherche(racine);
abr.ajouter(5);
abr.ajouter(25);
abr.ajouter(3);
abr.ajouter(7);
abr.ajouter(-1);
abr.ajouter(4);
abr.ajouter(8);
abr.ajouter(22);
abr.ajouter(55);
abr.ajouter(14);
abr.ajouter(44);
abr.ajouter(99);
abr.ajouter(15);
abr.supprimer(3);
/* Resultat attendu:
12
.
|G__ 5

4
|.....|G__ 4
|...........|G__ -1
|.....|D__ 7
|...........|D__ 8
|D__ 25
|.....|G__ 22
|...........|G__ 14
|.................|D__ 15
|.....|D__ 55
|...........|G__ 44
|...........|D__ 99
*/

8 Afficher un arbre
Surchargez la méthode toString retournant la représentation de l’arbre sous forme
de chaîne de caractères.
public String toString();

Exemple :
Noeud racine = new Noeud(12);
ArbreRecherche abr = new ArbreRecherche(racine);
arbre.ajouter(5);
arbre.ajouter(25);
arbre.ajouter(3);
arbre.ajouter(7);
arbre.ajouter(-1);
arbre.ajouter(4);
arbre.ajouter(8);
arbre.ajouter(22);
arbre.ajouter(55);
arbre.ajouter(14);
arbre.ajouter(44);
arbre.ajouter(99);
System.out.println(arbre);

/* Resultat attendu:
12
.
|G__ 5
|.....|G__ 3
|...........|G__ -1
|...........|D__ 4
|.....|D__ 7
|...........|D__ 8
|D__ 25
|.....|G__ 22
|...........|G__ 14
|.....|D__ 55
|...........|G__ 44
|...........|D__ 99
*/

Vous aimerez peut-être aussi