-1

当我实现二叉树时,人们编写的第一个实用程序之一是一个可视化函数,给定一棵树将其打印到屏幕上。

每次使用 cout 函数像堆栈一样打印它对我来说是个问题,我不能代表我的工作的价值。

用 ASCII 正确打印树很难理解。同时,它不能清晰地呈现您的树和您的操作。

通过一些研究,我发现了一个名为 Graphviz 的工具——图形可视化软件——它使用一种语言(称为 DOT)和一组工具来自动生成图形的可视化。Graphviz是画图的工具,不是树,所以不能用;并且为此实现 C++ 代码非常困难。

我正在寻找一些代码、算法或方法来显示我的树。我正在考虑使用一些库,如 GTK、QT、STL 或 WPF,因为我正在使用 Visual Studio C++。

可以使用它们吗?哪个最适合?

4

6 回答 6

4

树也是图;你可以很好地使用 Graphviz。并且 DOT 格式的输出非常简单。有关示例,请参见Graphviz 库,包括

于 2010-03-31T13:07:23.320 回答
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();
}
于 2013-09-07T04:48:00.663 回答
0

为了格式的简单性,我使用了yEd Graph EditorTrivial Graph Format的组合。

于 2012-02-27T21:53:15.177 回答
0

您还可以生成乳胶代码并编译 tex 文件以获取 pdf/eps。检查这个:http ://hstuart.dk/2007/02/21/drawing-trees-in-latex/

于 2012-02-27T21:44:59.873 回答
0

首先,对于树的可视化,如果你知道如何使用 C/C++ 将点文件脚本填充到空文件中,Graphviz 实现起来并不难。

其次,Graphviz 的 dot 不仅用于表示图,还用于树表示(因为图和树除了叶节点的循环和互连之外没有太大区别)。

所以,如果你对 DOT 不方便,Graphviz 还提供了其他工具,例如:neato、fdp、sfdp、twopi、circo。选择一个最适合您的目的。在此处探索 Graphviz 的更多信息。查看这张图片,了解数据方向在不同布局中是如何发生的。

另一种方式只是简单地在命令行中对树进行编码,这很随意。

于 2019-03-11T11:23:03.037 回答
0

在此处检查此算法。
打印任何二叉树的 ASCII 可视化。

                     0X0                     
                     / \                     
                    /   \                    
                   /     \                   
                  /       \                  
                 /         \                 
                /           \                
               /             \               
              /               \              
             /                 \             
            /                   \            
           /                     \           
         0X0                     0X0         
         / \                     / \         
        /   \                   /   \        
       /     \                 /     \       
      /       \               /       \      
     /         \             /         \     
   0X0         0X0         0X0         0X0   
   / \         / \         / \         / \   
  /   \       /   \       /   \       /   \  
0X0   0X0   0X0   0X0   0X0   0X0   0X0   0X0
于 2018-12-24T09:32:16.217 回答