当我实现了二叉树时,首先编写的实用程序之一就是一个可视化函数,它将树打印到屏幕上。
使用cout函数每次像堆栈一样打印它对我来说是一个问题,我不能代表我的工作价值。
使用ASCII正确打印树很难理解。同时,它无法以清晰的视角表示您的树和您的操作。
通过一些研究,我发现了一个名为Graphviz的工具 - 图形可视化软件 - 它使用一种语言(称为DOT)和一组自动生成图形可视化的工具。 Graphviz是绘制图形而不是树木的工具,因此我无法使用它;为此实现C ++代码非常困难。
我正在搜索一些代码,算法或方法来显示我的树。我正在考虑使用像GTK,QT,STL或WPF这样的库,因为我正在使用Visual Studio C ++。
可以使用它们吗?哪个最适合?
答案 0 :(得分:3)
树也是图表;你可以使用Graphviz就好了。输出的DOT格式为very simple。有关示例,请参阅Graphviz gallery,其中包括trees。
答案 1 :(得分:1)
在水平方向打印树的一个非常简单的解决方案:
5
1
5
9
7
14
代码(Node::print()
函数才是重要的):
#include<iostream>
using namespace std;
class Tree;
class Node{
public:
Node(int val): _val(val){}
int val(){ return _val; }
void add(Node *temp)
{
if (temp->val() > _val)
{
if (_rchild)
_rchild->add(temp);
else
{
_rchild = temp;
}
}
else
{
if (_lchild)
_lchild->add(temp);
else
{
_lchild = temp;
}
}
}
void print()
{
for (int ix = 0; ix < _level; ++ix) cout << ' ';
cout << _val << endl;
++_level;
if (_lchild)
{
_lchild->print();
--_level;
}
if (_rchild)
{
_rchild->print();
--_level;
}
}
private:
int _val;
Node *_lchild;
Node *_rchild;
static int _level;
};
int Node::_level = 0;
class Tree{
public:
Tree(): _root(0){}
void add(int val)
{
Node *temp = new Node(val);
if (!_root)
_root = temp;
else
_root->add(temp);
}
void print()
{
if (!_root)
return;
_root->print();
}
private:
Node *_root;
};
int main()
{
Tree tree;
tree.add(5);
tree.add(9);
tree.add(1);
tree.add(7);
tree.add(5);
tree.add(14);
tree.print();
}
答案 2 :(得分:0)
您还可以生成乳胶代码并编译tex文件以获取pdf / eps。检查一下:http://hstuart.dk/2007/02/21/drawing-trees-in-latex/
答案 3 :(得分:0)
为了简化格式,我使用了yEd Graph Editor和Trivial Graph Format的组合。
答案 4 :(得分:0)
检查此算法here。
为任何二叉树打印ASCII可视化。
0X0
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
0X0 0X0
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
0X0 0X0 0X0 0X0
/ \ / \ / \ / \
/ \ / \ / \ / \
0X0 0X0 0X0 0X0 0X0 0X0 0X0 0X0