二叉树可视化--Graphviz
来源:互联网 发布:免费资源的电视软件 编辑:程序博客网 时间:2024/05/29 19:58
大家平时写C程序有没有种把内存里的数据结构全给画出来的冲动呢?数据量小的话,画起来还蛮简单,用viso,我前面的文章都用viso画的。之前写红黑树代码的时候,用的是命令行把整个树打印出来,不过只是一些小片段,很丑,还得自己手动再在纸上画一遍,非常麻烦,要是用程序就能把图画出来那就爽了。好了,推荐使用 Graphviz这个东东,so 一下就知道啦,功能挺丰富的,也提供了很多库(c,php,python等),下面画一颗简单的红黑树(红黑树代码参考我前面的代码,下面只写画树的代码)直接看效果图:
这树怎么画的呢?参考官网 http://www.graphviz.org/Documentation.php
1.编写规则文件(可以用Graphviz自带的lib,如cgraph等生成,或者直接就用fprintf生成,可以简单看下中文的翻译 简单的dot规则)
2.用Graphviz自带的一些工具例如dot等解析一下规则文件,然后生成图片(ps,jpg,png等)或者其它格式的文件。
下面是实现。
t.c//测试代码,用到的函数参考我前面写的红黑树文章的代码。
void rbtree_fprint_node(rbtree_node * t,FILE *fp){ if(t->color == RB_BLACK){ fprintf(fp,"node[shape=record,style=filled,color=black,fontcolor=white];\n"); }else{ fprintf(fp,"node[shape=record,style=filled,color=red,fontcolor=white];\n"); } fprintf(fp,"%d[label=\"<f0> | <f1> %d | <f2> \"];\n",t->key.value,t->key.value);}void rbtree_fprint_tree(rbtree_node * t,FILE *fp){ if(rb_nil == t) return; if(t->parent == rb_nil){//root rbtree_fprint_node(t,fp); } if(t->left != rb_nil){ rbtree_fprint_node(t->left,fp); fprintf(fp,"%d:f0:sw->%d:f1;\n",t->key.value,t->left->key.value); } if(t->right != rb_nil){ rbtree_fprint_node(t->right,fp); fprintf(fp,"%d:f2:se->%d:f1;\n",t->key.value,t->right->key.value); } rbtree_fprint_tree(t->left,fp); rbtree_fprint_tree(t->right,fp);}
int main(int argc,char *argv[]){ rbtree_node *t,*p,*max,*min; int arr[] = {9,8,11,18,2,5,16,1,7,999,234,7662,387,928,454}; int i; rbtree_init_nil(); t = rbtree_create(15); t->color = RB_BLACK; for(i=0;i<15;i++){ rbtree_add(&t,arr[i]); } //rb tree print FILE *fp; fp = fopen("g2.dot","w+"); fprintf(fp,"digraph G{\n"); rbtree_fprint_tree(t,fp); fprintf(fp,"}"); fclose(fp);}
最终生成的是 一个 dot文件,dot文件的语法上官网查,并不是很复杂。
digraph G{node[shape=record,style=filled,color=black,fontcolor=white];9[label="<f0> | <f1> 9 | <f2> "];node[shape=record,style=filled,color=black,fontcolor=white];5[label="<f0> | <f1> 5 | <f2> "];9:f0:sw->5:f1;node[shape=record,style=filled,color=red,fontcolor=white];18[label="<f0> | <f1> 18 | <f2> "];9:f2:se->18:f1;node[shape=record,style=filled,color=black,fontcolor=white];2[label="<f0> | <f1> 2 | <f2> "];5:f0:sw->2:f1;node[shape=record,style=filled,color=black,fontcolor=white];8[label="<f0> | <f1> 8 | <f2> "];5:f2:se->8:f1;node[shape=record,style=filled,color=red,fontcolor=white];1[label="<f0> | <f1> 1 | <f2> "];2:f0:sw->1:f1;node[shape=record,style=filled,color=red,fontcolor=white];7[label="<f0> | <f1> 7 | <f2> "];8:f0:sw->7:f1;node[shape=record,style=filled,color=black,fontcolor=white];15[label="<f0> | <f1> 15 | <f2> "];18:f0:sw->15:f1;node[shape=record,style=filled,color=black,fontcolor=white];999[label="<f0> | <f1> 999 | <f2> "];18:f2:se->999:f1;node[shape=record,style=filled,color=black,fontcolor=white];11[label="<f0> | <f1> 11 | <f2> "];15:f0:sw->11:f1;node[shape=record,style=filled,color=black,fontcolor=white];16[label="<f0> | <f1> 16 | <f2> "];15:f2:se->16:f1;node[shape=record,style=filled,color=red,fontcolor=white];387[label="<f0> | <f1> 387 | <f2> "];999:f0:sw->387:f1;node[shape=record,style=filled,color=black,fontcolor=white];7662[label="<f0> | <f1> 7662 | <f2> "];999:f2:se->7662:f1;node[shape=record,style=filled,color=black,fontcolor=white];234[label="<f0> | <f1> 234 | <f2> "];387:f0:sw->234:f1;node[shape=record,style=filled,color=black,fontcolor=white];928[label="<f0> | <f1> 928 | <f2> "];387:f2:se->928:f1;node[shape=record,style=filled,color=red,fontcolor=white];454[label="<f0> | <f1> 454 | <f2> "];928:f0:sw->454:f1;}
- 二叉树可视化--Graphviz
- 二叉树可视化--Graphviz
- 使用Graphviz 画二叉树
- 使用graphviz绘制二叉树
- 使用graphviz画二叉树
- 可视化图形软件 Graphviz
- 使用graphviz绘制二叉树(二)
- 数据结构与算法14: 利用Graphviz快速可视化树(visualizing Trees with Graphviz easily )
- 二叉树的可视化
- 二叉树的可视化
- 二叉树的可视化
- 可视化遍历二叉树
- 二叉树的可视化
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- android中The connection to adb is down,问题和解决
- SmtpClient deliveryMethod
- 云计算介绍-1.2,IaaS\PaaS\SaaS比较
- awakeFromNib (XIB view 的初始化)
- BPM版本区别
- 二叉树可视化--Graphviz
- BS和CS对比
- php中static静态变量的使用方法详解
- iOS 判别汉字
- hdu 1156 Color the ball
- G++ 教程(转)
- 积极有效的执行力
- 线性代数导论8——求解Ax=b:可解性和解的结构
- UVA 10714 Ants 蚂蚁 贪心+模拟 水题