Arbres

1 - Arbres binaires étiquetés

Aujourd'hui nous allons manipuler des arbres. Les arbres sont des structures de données constituées de noeuds interconnectés. Il ont pour particularités :

Nos arbres seront en outre : Concernant un noeud, nous dirons qu'il s'agit :

En termes d'implémentation, nous définirons donc un arbre à l'aide d'une classe contenant un attribut racine qui pourra :

Vous pouvez remarquer qu'un sous arbre est défini par un noeud, racine de ce sous arbre, est par tous les noeuds descendant de cette racine. Il n'y a pas vraiment de différence entre un arbre et un sous arbre si ce n'est l'objet de la classe Arbre qui va autour de l'arbre.

Tout ceci correspond à une classe Noeud.java, une classe Arbre.java et le programme d'exemple EssaiArbres.java construit deux arbres différents. Le programme d'exemple construit "à la main" deux arbres pour vous permettre de faire vos premiers tests. Par la suite, la construction d'un arbre se fera par insertion dans un arbre existant.

Enfin, nous dirons qu'un arbre a contient un noeud x si x est la racine de a ou si l'un des fils de la racine de a contient x.
Nous définissons :

Questions Pour toutes les questions où il vous est demandé d'écrire une méthode, une version récursive (sur les noeuds) sera plus simple et plus naturelle. La solution complète sera alors une méthode d'Arbre qui appelle la méthode récursive sur sa racine.
  1. quel est le nombre de noeuds des arbres du programme donné en exemple ? Leur hauteur ?
  2. écrivez une méthode pour calculer le nombre de noeuds d'un arbre
  3. écrivez une méthode pour calculer la hauteur d'un arbre
  4. écrivez une méthode renvoyant une chaine de caractères représentant un arbre. Vous pouvez :

2 - Arbres binaires de recherche

Une arbre binaire étiqueté est dit arbre binaire de recherche (ou ABR) si :

Questions
  1. les deux exemples dans le programme précédent sont-ils des ABR ?
  2. écrivez une méthode permettant de déterminer si une étiquette donnée est présente sur l'un des noeuds d'un ABR
  3. écrivez une méthode permettant d'insérer un nouveau noeud muni d'une étiquette donnée dans un ABR
  4. comment s'y prend-on pour afficher toutes les étiquettes contenues dans un ABR dans l'ordre ?
  5. reprenez la classe ExempleTableau.java utilisée lors du TP sur les tableaux pour générer un tableau d'entiers aléatoires, insérez tous ces entiers dans un ABR et affichez les dans l'ordre.