树/图数据结构的可视化

发布于 2020-11-15  3635 次阅读


树和图是很常用的数据结构,但是通过程序很难直观的看出他们的结构,无论是前中后序遍历还是广度优先深度优先遍历,我们所能看到的只是一个序列,具体结构还得靠自己思索。因此我想能够把它们快速可视化绘出。
刚好有这样的工具————graphviz可以实现可视化,它使用的脚本语言叫dot。比如说一个普通的简单二叉树,a为根节点,b和c分别为其左右结点,就可以写成

digraph BiTree{
a->b;
a->c;
}

效果如图

那么我们只需要在程序中遍历树或者图的结构,记录哪个结点指向哪个结点,写成一个dot脚本文件再用graph的工具读取就可以了。那么比如对于二叉树,就可以使用递归写出对应绘图子函数

void DrawTree(BiTree T)
//绘出树的图像
{
    static int flag = 0;
    if (flag == 0)
    {
        FILE* fpT = fopen("H:\\TreePic.dot", "w+");
        fprintf(fpT, "digraph Tree{\n");
        flag = 1;
    }
    if (T != NULL)
    {
        if (T->lchild != NULL)
            fprintf(fpT, "%d->%d;\n", T->data.key, T->lchild->data.key);
        if (T->rchild != NULL)
            fprintf(fpT, "%d->%d;\n", T->data.key, T->rchild->data.key);
        DrawTree(T->lchild);
        DrawTree(T->rchild);
    }
}

主函数中再写fclose关闭文件和system调用graphviz工具打开这个dot文件就完成了,复杂一点的效果图:


华科菜鸡计科学生