树和图是很常用的数据结构,但是通过程序很难直观的看出他们的结构,无论是前中后序遍历还是广度优先深度优先遍历,我们所能看到的只是一个序列,具体结构还得靠自己思索。因此我想能够把它们快速可视化绘出。
刚好有这样的工具————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文件就完成了,复杂一点的效果图:
Comments | NOTHING