Votre arbre aura besoin de deux fois la distance pour chaque couche :
a
/ \\
/ \\
/ \\
/ \\
b c
/ \\ / \\
/ \\ / \\
d e f g
/ \\ / \\ / \\ / \\
h i j k l m n o
Vous pouvez enregistrer votre arbre dans un tableau de tableaux, un tableau pour chaque profondeur :
\[\[a\],\[b,c\],\[d,e,f,g\],\[h,i,j,k,l,m,n,o\]\]
Si votre arbre n'est pas complet, vous devez inclure des valeurs vides dans ce tableau :
a
/ \\
/ \\
/ \\
/ \\
b c
/ \\ / \\
/ \\ / \\
d e f g
/ \\ \\ / \\ \\
h i k l m o
\[\[a\],\[b,c\],\[d,e,f,g\],\[h,i, ,k,l,m, ,o\]\]
Ensuite, vous pouvez itérer sur le tableau pour imprimer votre arbre, en imprimant des espaces avant le premier élément et entre les éléments selon la profondeur et en imprimant les lignes selon que les éléments correspondants dans le tableau pour la couche suivante sont remplis ou non. Si vos valeurs peuvent avoir plus d'un caractère, vous devez trouver la valeur la plus longue en créant la représentation du tableau et multiplier toutes les largeurs et le nombre de lignes en conséquence.
6 votes
C'est une question délicate. Je pense que vous devez d'abord déterminer la profondeur de l'arbre. Personnellement, je déverserais simplement le graphe de nœuds dans Graphviz et le laisserais s'en occuper :-)
0 votes
Il semble que si vous aviez beaucoup d'éléments, l'élément racine aurait un ÉNORME avantage à partir de lui.
0 votes
J'ai une méthode getDept() dans l'arbre
1 votes
Juste parce que l'idée m'amusait, j'ai écrit le code en C++ et lui ai fait cracher le format digraphe de Graphviz. Des arbres joliment formatés.
0 votes
vanya.jp.net/vtree