Dessiner un arbre en java?^^

Dessiner un arbre en java?^^ - Java - Programmation

Marsh Posté le 07-01-2007 à 21:46:08    

Bonjour,
 
Voilà je suis entrain de concevoir une petite application en java sur les AVL avec interface graphique et représentation dynamique de l'arbre sur un Canvas, dans le cadre d'un projet pour les cours.
 
Et j'ai un petit soucis pour dessiner mon arbre, j'ai l'impression que ca peut se faire recurssivement mais je n'y arrive pas, je n'arrive pas à determiner la position des noeuds fils en fonction de leur noeud pére...je suppose que la hauteur de l'arbre intervient dans tout ca mais à force de me creuser la tête je commence à m'emmeler les pinceaux :p
 
Voilà donc si quelqu'un pouvait m'aiguiller ca m'aiderait beaucoup ^^
 
Merci d'avance !
 
PS : Je savais pas trop ou poster ma question, dslé si je me suis trompé d'endroit  :jap:

Reply

Marsh Posté le 07-01-2007 à 21:46:08   

Reply

Marsh Posté le 08-01-2007 à 00:35:03    

Salut,
 
Voici une petite fonction récursive, qui [devrait^^] imprimer ton AVL depuis un noeud père, jusqu'à un noeud donné.

Code :
  1. public static void imprimeAVL(Noeud père, Noeud noeud) {
  2.  if (père == null) {
  3.   System.out.println("Rien" );
  4.   return;
  5.  }
  6.  if (père.data == noeud.data) { System.out.println(père.data);return;
  7.  } else System.out.println(père.data);
  8.  if (père.data > noeud.data)
  9.   imprimeAVL(père.left, noeud);
  10.  else
  11.   imprimeAVL(père.right, noeud);
  12. }


Message édité par classpath le 08-01-2007 à 00:38:10
Reply

Marsh Posté le 08-01-2007 à 01:40:57    

Merci ^^
 
Eu en fait je veux pas afficher mon avl dans la console, je veux le dessiner sur un canvas :p
J'étais entrain d'essayer à nouveau et j'ai presque trouvé il faut jouer avec la hauteur pour calculer les coordonnées puisque l emplacement du noeud va dépendre de la largeur que prend le sous arbre de ce même noeud, afin que les 2 sous arbres ne se dessinent pas à "cheval" l'un sur l autre^^
 
Apparemment j'ai l impression que chaque noeud se dessine à une distance de +(2^h)/2 pour le fils gauche et -(2^h)/2 pour le fils droit de l'abscisse de son père.
Avec h, la hauteur (plus grande branche)du sous arbre du noeud concerné
 
Enfin après j en suis pas sur, vous en pensez quoi? ^^


Message édité par the_phoenix2 le 08-01-2007 à 01:41:54
Reply

Marsh Posté le 08-01-2007 à 02:24:01    

si t'as pas envie de te faire chier avec le coté graphique de la chose, y'a des libs toutes faites ;)

Reply

Marsh Posté le 08-01-2007 à 02:53:05    

tu peut faire ça en 2 passes, une du bas vers le haut pour calculer la largeur de chaque sous arbre :
largeur feuille == 1
largeur noeud = largeur fils gauche + largeur fils droit
 
puis une fois que t'as toute les largeurs, tu calcule les positions, la verticale est triviale c'est la profondeur de l'arbre, l'horizontale c'est :
x racine = largeur racine /2
x fils gauche = x noeud - largeur fils gauche / 2
x fils droit = x noeud + largeur fils droit / 2
 
ce sera pas optimalement compact, mais ça devrait marcher et c'est assez simple à faire.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed