C Comment “dessiner” un Arbre Binaire de la console
Ce que les algorithmes peuvent être utilisés pour dessiner un arbre binaire dans la console? L'arbre est mis en œuvre en C. Par exemple, un BST avec des nombres: 2 3 4 5 8 serait affiché dans la console:
- créer un .dot fichier contenant vos nœuds et d'arêtes, et le rendre avec graphviz. L'air soigné
- nice. J'ai en fait mis en place un renderlist et un framebuffer et générer mon propre Pgo!
- Veuillez mettre à jour l'image 🙂
Vous devez vous connecter pour publier un commentaire.
Découvrez L'impression des Arbres Binaires en Ascii
De @AnyOneElse Pastbin ci-dessous:
de sortie:
Code:
De sortie:
ou
Quelques conseils: l'espacement entre les noeuds à la même profondeur (par exemple, 2 et 4 ou 3 et 8 dans votre exemple), est une fonction de la profondeur.
Chaque imprimée ligne se compose de tous les nœuds avec la même profondeur, imprimés à partir du nœud le plus à gauche à l'extrême droite du nœud.
Si vous avez besoin d'un moyen de, par exemple, organiser vos nœuds dans des tableaux de lignes, en fonction de leur profondeur, dans l'ordre de leur la plus à gauche-ness.
De départ à partir du nœud racine, un en largeur d'abord de recherche permettra de visiter des nœuds dans l'ordre de la profondeur et de la plus à gauche-ness.
L'espacement entre les noeuds peuvent être trouvés en trouver le maximum de la hauteur de l'arbre, en utilisant une largeur constante pour le plus profond des nœuds, et du double de la largeur pour chaque profondeur moindre, de sorte que la largeur pour une profondeur = ( 1 + maxdepth - currentdepth ) * deepestwidth.
Que nombre vous donne l'impression largeur horizontale" de chaque nœud, à quelque profondeur.
Un nœud de gauche est à l'horizontale positionné dans la moitié gauche de son parent largeur, un droit nœud dans la moitié droite. Vous allez insérer un entretoises pour tout nœud qui n'ont pas de parents; un moyen plus facile de le faire serait de s'assurer que toutes les feuilles sont à la même profondeur que le nœud le plus profond, avec vide que leur valeur. Évidemment, vous aurez également à compenser la largeur des valeurs, peut-être en faisant la plus grande profondeur de largeur au moins aussi large que celui de l'imprimé (décimal représentation, sans doute) de la plus grande évalués nœud.
Voici un de plus à prendre lorsque l'arbre est mis en œuvre dans la gamme:
De sortie:
J'ai cette petite solution en c++, il pourrait facilement être converti en c.
Ma solution ne nécessite supplémentaire d'une structure de données pour stocker le courant du nœud de profondeur dans l'arbre (parce que si vous travaillez avec un incomplètes arbre un sous-arbre de profondeur peuvent ne pas être compatibles avec la profondeur dans l'arbre.)
Il imprime le suivant:
node_depth
de la droite du sous-arbre déjà. Peut-être même vous fait une faute de frappe lorsque vous copié? Travail code ici: ideone.com/wrY8VoChercher à la sortie de la commande pstree dans Linux.
Il ne produit pas de la sortie dans la forme exacte que vous voulez, mais à mon humble avis c'est plus lisible ainsi.
J'deuxième litb de la recommandation. J'ai eu à faire ces derniers temps pour imprimer la VAD arbre d'un processus de Windows et j'ai utilisé de la DOT de la langue (il suffit d'imprimer les nœuds de votre arbre binaire de marche de la fonction):
http://en.wikipedia.org/wiki/DOT_language
Par exemple, votre DOT fichier contient:
Vous générer le graphique avec dotty.exe ou de le convertir en PNG à l'aide de dot.exe.
Très simple, C++ solution d'impression de l'arbre dans le sens horizontal:
Code (
Node::print()
fonction est ce qui compte):Je pense que vous ne devriez pas le code que vous-même, mais avoir un regard sur Arbre::Visualiser qui semble être un bon Perl mise en œuvre avec les différents styles possibles et de l'utilisation/port de l'un des algorithmes.
J'ai un Rubis programme qui calcule les coordonnées où chaque nœud dans un arbre binaire doit être établi ici: http://hectorcorrea.com/Blog/Drawing-a-Binary-Tree-in-Ruby
Ce code utilise un algorithme de base pour calculer les coordonnées et il n'est pas zone "efficace" mais c'est un bon début. Si vous voulez voir le code "live", vous pouvez le tester ici: http://binarytree.heroku.com/