在这里插入图片描述

graphvizgraphvizgraphviz(Graph Visualization Software)是一个由AT&TAT\&TAT&T实验室启动的开源工具包,用于绘制DOTDOTDOT语言脚本描述的图形。

实现可视化效果(官网摘取):

在这里插入图片描述
在这里插入图片描述

下载安装

官网:http://www.graphviz.org/

对应各个系统版本下载,win用户安装过程中选择自动加入path即可,其他系统用户详见官网下载页说明。

使用

vscode对应插件Graphviz Preview

主要方法

主要分为八个转换方法,graphvizgraphvizgraphviz主要功能就是把脚本转化为svg图或者其他模式的图片,其中使用较多的转换方法是dotneato

  • dot:有向图
  • neato:无向图

作用方式为:dot/neato/... [option] file

保存为pdf文件,类比svg

dot -Tpdf -o test.pdf ./test.dot

在这里插入图片描述

更详细的参数说明见http://www.graphviz.org/pdf/dot.1.pdf

应用

为搜索二叉树基类添加DOT格式文档的输出方法:

template <typename T>
void Tree<T>::TreeOut(TreeNode<T> *x, string name)
{
    // 声明文件名称
    stringstream sstr;
    name = name + ".dot";
    int num = name.size() + 1;
    char *filename = new char[num];
    sstr << name;
    sstr >> filename;
    freopen(filename, "w", stdout);
    cout << "digraph Tree{" << endl;
    queue<TreeNode<T> *> q;
    q.push(x);
    while (q.size())
    {
        TreeNode<T> *tmp = q.front();
        q.pop();
        if (tmp->_left)
        {
            cout << tmp->_key << "->" 
                << tmp->_left->_key << endl;
            q.push(tmp->_left);
        }
        if (tmp->_right)
        {
            cout << tmp->_key << "->" 
                << tmp->_right->_key << endl;
            q.push(tmp->_right);
        }
    }

最终得出结果为:
在这里插入图片描述

可以看得出效果相对较差,因为间距问题和无法区分左右子树,所以后续需要继续改进,网上挖到一份陈年脚本,用上效果很好,挂个链接:https://gist.github.com/nanpuyue/b5950f20937f01aa43227d269aa83918

在这里插入图片描述

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐