Comment puis-je imprimer un arbre binaire en Java afin que la sortie soit comme:
4
/ \
2 5
Mon nœud:
public class Node<A extends Comparable> {
Node<A> left, right;
A data;
public Node(A data){
this.data = data;
}
}
java
printing
binary-tree
Tian
la source
la source
Réponses:
J'ai créé une imprimante d'arbre binaire simple. Vous pouvez l'utiliser et le modifier comme vous le souhaitez, mais il n'est de toute façon pas optimisé. Je pense que beaucoup de choses peuvent être améliorées ici;)
Sortie 1:
Sortie 2:
la source
Imprimez un [grand] arbre par lignes.
exemple de sortie:
code:
PS Cette réponse ne se concentre pas exactement sur les arbres "binaires" - à la place, elle imprime toutes sortes d'arbres. La solution est inspirée de la commande "tree" sous linux.
la source
children.get(children.size() - 1)
si HashMap était utilisé pour les enfants? J'ai réussi à modifier toutes les autres parties sauf celle-ci.HashMap<String, List<String>>
?HashMap<String, Node>
. String est l'identifiant du nœud.J'ai créé un algorithme amélioré pour cela, qui gère bien les nœuds de taille différente. Il imprime de haut en bas à l'aide de lignes.
Pour utiliser ceci pour votre arbre, laissez votre
Node
classe implémenterPrintableNode
.Exemple de sortie:
la source
???????????
place des lignes entre les nœuds mais devrait être juste un problème de trucs UTF8 ans. Bref, des trucs formidables, je dois dire. Meilleure réponse pour moi car il est vraiment facile à utiliser.public static <T> void print(T[] elems)
imprimera:
pour l'entrée
8 4 12 2 6 10 14 1 3 5 7 9 11 13 20 15
ceci est une variante de la réponse de @ anurag - ça me dérangeait de voir les | s supplémentaires
la source
Adapté de la réponse de Vasya Novikov pour le rendre plus binaire , et utiliser a pour plus d'efficacité (la concaténation d' objets ensemble en Java est généralement inefficace).
StringBuilder
String
Production:
la source
right != null
.J'ai fait l'édition et l'ai testé, cela fonctionne bien.michal.kreuzman gentil je vais devoir dire.
Je me sentais paresseux de créer un programme par moi-même et de rechercher du code sur le net quand j'ai trouvé que cela m'a vraiment aidé.
Mais j'ai peur de voir que cela ne fonctionne que pour les chiffres uniques, comme si vous utilisiez plus d'un chiffre, puisque vous utilisez des espaces et non des tabulations, la structure va être égarée et le programme perdra son utilisation.
En ce qui concerne mes derniers codes, j'avais besoin d'entrées plus importantes (au moins plus de 10), cela n'a pas fonctionné pour moi, et après avoir beaucoup cherché sur le net quand je n'ai rien trouvé, j'ai créé un programme moi-même.
Il a quelques bugs maintenant, encore une fois en ce moment je me sens paresseux pour les corriger mais il imprime très bien et les nœuds peuvent prendre n'importe quelle grande valeur.
L'arbre ne sera pas comme l'indique la question mais il est tourné à 270 degrés :)
Placez cette fonction avec votre propre TreeNode spécifié et gardez le niveau initialement 0, et profitez-en!
Voici quelques exemples de sorties:
Le seul problème est avec les branches qui s'étendent; J'essaierai de résoudre le problème le plus tôt possible, mais d'ici là, vous pouvez également l'utiliser.
la source
Votre arbre aura besoin de deux fois la distance pour chaque couche:
Vous pouvez enregistrer votre arbre dans un tableau de tableaux, un tableau pour chaque profondeur:
Si votre arbre n'est pas plein, vous devez inclure des valeurs vides dans ce tableau:
Ensuite, vous pouvez parcourir le tableau pour imprimer votre arbre, imprimer des espaces avant le premier élément et entre les éléments en fonction de la profondeur et imprimer les lignes selon que les éléments correspondants du tableau pour la couche suivante sont remplis ou non. Si vos valeurs peuvent comporter plus d'un caractère, vous devez trouver la valeur la plus longue lors de la création de la représentation de tableau et multiplier toutes les largeurs et le nombre de lignes en conséquence.
la source
J'ai trouvé la réponse de VasyaNovikov très utile pour imprimer un grand arbre général, et je l'ai modifiée pour un arbre binaire
Code:
Exemple de sortie:
la source
Une solution en langage Scala , analogue à ce que j'ai écrit en java :
Exemple de sortie:
la source
Je sais que vous avez tous une excellente solution; Je veux juste partager le mien - ce n'est peut-être pas la meilleure façon, mais c'est parfait pour moi!
Avec
python
etpip
sur, c'est vraiment assez simple! BOOM!Sur Mac ou Ubuntu (le mien est mac)
$ pip install drawtree
$python
, entrez dans la console python; tu peux le faire d'une autre manièrefrom drawtree import draw_level_order
draw_level_order('{2,1,3,0,7,9,1,2,#,1,0,#,#,8,8,#,#,#,#,7}')
TERMINÉ!
Suivi de la source:
Avant de voir ce post, je suis allé sur google "texte brut de l'arbre binaire"
Et j'ai trouvé ceci https://www.reddit.com/r/learnpython/comments/3naiq8/draw_binary_tree_in_plain_text/ , dirigez-moi vers ce https://github.com/msbanik/drawtree
la source
java
il attend une réponse Java :)la source
C'est une solution très simple pour imprimer un arbre. Ce n'est pas si joli, mais c'est vraiment simple:
Exemple de sortie:
la source
Basé sur la réponse de VasyaNovikov. Amélioré avec un peu de magie Java: génériques et interface fonctionnelle.
Exemple d'appel initial:
Sortira quelque chose comme
la source
J'ai écrit une imprimante d'arbre binaire en Java.
Le code est sur GitHub ici .
Il n'a pas été optimisé pour l'efficacité d'exécution, mais puisque nous parlons d'impression en ASCII, j'ai pensé qu'il ne sera pas utilisé sur de très grands arbres. Il a cependant quelques fonctionnalités intéressantes.
Certains programmes de démonstration / test sont inclus.
Un exemple d'arbre binaire généré aléatoirement, tel qu'imprimé par le programme, suit. Cela illustre l'utilisation efficace de l'espace, avec un grand sous-arbre droit s'étendant sous un petit sous-arbre gauche:
Un exemple d'impression des cinq arbres binaires de nœuds (avec des étiquettes dans l'ordre) sur la page:
Voici un exemple du même arbre imprimé de 4 manières différentes, avec un espacement horizontal de 1 et de 3, et avec des branches diagonales et horizontales.
la source
@Makyen
dans un commentaire.C'est une question intéressante, et j'ai également écrit un projet pour cela.
imprimante-arborescence binaire
Voici quelques exemples:
Imprimer BST aléatoire.
Affiche l'arborescence à partir d'un tableau d'ordre de niveau de style leetcode, '#' signifie un terminateur de chemin où aucun nœud n'existe en dessous.
la source
J'avais besoin d'imprimer un arbre binaire dans l'un de mes projets, pour cela j'ai préparé une classe java
TreePrinter
, l'un des exemples de sortie est:Voici le code de la classe
TreePrinter
avec la classeTextNode
. Pour imprimer n'importe quel arbre, vous pouvez simplement créer un arbre équivalent avecTextNode
class.Enfin, voici une classe de test pour l'impression d'un échantillon donné:
la source
Vous pouvez utiliser une applet pour visualiser cela très facilement. Vous devez imprimer les éléments suivants.
Imprimez les nœuds sous forme de cercles avec un rayon visible
Obtenez les coordonnées de chaque nœud.
La coordonnée x peut être visualisée comme le nombre de nœuds visités avant que le nœud ne soit visité dans son parcours dans l'ordre.
La coordonnée y peut être visualisée comme la profondeur du nœud particulier.
Imprimer les lignes entre parent et enfants
Cela peut être fait en conservant les coordonnées x et y des nœuds et les parents de chaque nœud dans des listes séparées.
Pour chaque nœud sauf root, joignez chaque nœud à son parent en prenant les coordonnées x et y de l'enfant et du parent.
la source
https://github.com/murtraja/java-binary-tree-printer
ne fonctionne que pour les entiers de 1 à 2 chiffres (j'étais paresseux pour le rendre générique)
la source
C'était la solution la plus simple pour la vue horizontale. Essayé avec un tas d'exemples. Fonctionne bien pour mon objectif. Mis à jour à partir de la réponse de @ nitin-k.
Appel:
Solution:
la source
node_length * nodes_count + space_length * spaces_count*
.Code sur GitHub: YoussefRaafatNasry / bst-ascii-visualisation
la source
visualize
fonction, c'est toute lavisualizer
classe qui fait environ 200 loc, y compris le fichier d'en-tête.Pour ceux qui recherchent une solution Rust:
La sortie est quelque chose comme ceci:
la source
Imprimer dans la console:
Code simple:
la source
Voici une imprimante d'arbres très polyvalente. Pas le plus beau, mais il gère beaucoup de cas. N'hésitez pas à ajouter des barres obliques si vous pouvez le comprendre.
Classe NodeInfo
Classe NodePosition
Et, enfin, Node Interface
la source
Une solution Scala, adaptée de la réponse de Vasya Novikov et spécialisée pour les arbres binaires:
la source
Voir aussi ces réponses .
En particulier, il n'était pas trop difficile d'utiliser abego TreeLayout pour produire les résultats présentés ci-dessous avec les paramètres par défaut.
Si vous essayez cet outil, notez cette mise en garde: il imprime les enfants dans l'ordre dans lequel ils ont été ajoutés. Pour un BST où la gauche vs la droite compte, j'ai trouvé cette bibliothèque inappropriée sans modification.
De plus, la méthode pour ajouter des enfants prend simplement un nœud
parent
etchild
comme paramètres. (Donc, pour traiter un tas de nœuds, vous devez prendre le premier séparément pour créer une racine.)J'ai fini par utiliser cette solution ci-dessus, en la modifiant pour prendre le type
<Node>
afin d'avoir accès àNode
la gauche et à la droite de (enfants).la source
Voici une autre façon de visualiser votre arborescence: enregistrez les nœuds sous forme de fichier xml puis laissez votre navigateur vous montrer la hiérarchie:
Voici le code pour le tester:
Et la sortie ressemble à ceci:
la source
la source
c'est l'une des versions les plus simples que je puisse implémenter. J'espère que ça t'aide
la source