Travaux pratiques: arbres binaires de recherche
Transcription
Travaux pratiques: arbres binaires de recherche
Algorithmique et application Java Université Paris-Dauphine MIDO L2 Travaux pratiques: arbres binaires de recherche Rappels de cours Soit T un arbre. Si tout élément x ∈ T a au-plus deux ls, un ls gauche g(x) et un ls droit d(x), alors T est un arbre binaire (on note g(x) ou d(x) = N IL si le ls gauche ou droit n'existe pas, respectivement). Le sous-arbre Tx de T enraciné en x ∈ T est l'arbre de racine x induit par tous les descendants de x dans T (si x n'existe pas, alors Tx = ∅). L'arbre T est un arbre binaire de recherche si pour tout x ∈ T , y ∈ Tg(x) et z ∈ Td(x) , on a y ≤ x ≤ z (où ≤ est une relation d'ordre totale sur T ). 1. Veuillez ouvrir la page http://www.lamsade.dauphine.fr/~lacour/algo/tp_04. Importez dans un package tp_04 les chiers .java qui s'y trouvent. 2. Le but de la séance est d'implémenter quelques méthodes pour manipuler des arbres binaires de recherche (binary search trees ). La représentation retenue pour ce type d'objet est récursive et a été dénie dans la classe BinaryNode : prenez-en connaissance. 3. De plus, plusieurs méthodes pour manipuler ces objets ont déjà été implémentées dans la classe BinarySearchTree. Lisez-les également (observez le fonctionnement des méthodes insert, find, remove...). Notez l'usage de l'interface générique Comparable et de la méthode compareTo: x.compareTo( t.element ) < 0 si x est plus petit que t.element. Quelle est la caractéristique commune de toutes ces méthodes? 4. Implémentez (et testez) les méthodes suivantes dans BinarySearchTree: public String toString (BinaryNode t) représente t dans une chaîne de caractères pour l'achage public void inOrder( BinaryNode t ) ache t selon un parcours inxe public boolean isSingleton( BinaryNode t ) teste si t est une feuille public int numbLeaf( BinaryNode t ) retourne le nombre de feuilles du (sous)arbre t public int numbNodes( BinaryNode t ) retourne le nombre de n÷uds du (sous)arbre t public int height( BinaryNode t ) retourne la hauteur d'un (sous-)arbre t public int sDepth( BinaryNode t ) retourne la somme des profondeurs des n÷uds internes du (sous-)arbre t 2010-2011 1