Arbres (bis)
1 - Arbres binaires de recherche (suite)
Complétez votre TP de la dernière fois pour doter vos arbres binaires de recherche d'une
opération de suppression. Testez en partant du dernier exercice du dernier TP :
- construisez un ABR à partir d'un tableau d'entiers aléatoires
- affichez l'arbre
- demandez à l'utilisateur de saisir un entier
- supprimez de l'arbre le noeud ayant pour étiquette l'entier saisi
- affichez le résultat
2 - Arbres génériques
Nous allons maintenant rendre nos arbres génériques, c'est-à-dire étiqueté par une classe générique
et non plus forcément par un entier. Selon la solution que vous avez écrite la dernière fois, la mise en
oeuvre pourra varier légèrement :
- si vos méthodes récursives sur les noeuds sont des méthodes non statiques (associées à un
objet donc), la solution ressemblera à ce que nous avons déjà écrit pour les listes :
class Arbre<T> {
Noeud<T> racine;
...
contenant des méthodes du genre :
boolean rechercherRec(Noeud<T> n, T etiquette) {
...
- sinon, si vos méthodes récursives sont statiques, elle ne sont pas associées à un objet et
n'ont donc pas de paramètre T. Il faut donc s'y prendre autrement, en écrivant des
méthodes génériques, car les noeud, eux, sont maintenant génériques :
static <T> boolean rechercher(Noeud<T> n, T etiquette) {
Et, bien entendu, comme nous manipulons des ABR, nous pouvons avoir envie que le type générique soit
totalement ordonné, dans ce cas, nous ressortons l'interface Comparable déjà vue
précédemment, ce qui donne respectivement :
-
class Arbre<T extends Comparable<T>> {
...
- ou
static <T extends Comparable<T>> boolean rechercher(Noeud<T> n, T etiquette) {