前言
不知道你有没有找过一些工具来画数据结构的图,我反正是找了不少。windows下的visio是挺强大的,不过在linux没法使用,当然你非要使用也可以安装wine;亿图也不错,支持画数据结构图,不过是收费的。然而前面这些都不是重点,重点是他们画图都是拖拽类型的,手残党实在把持不住。最后终于发现了一款程序员画图神器-graphviz。《什么是二叉查找树》文中的树图就是用该工具画的.
graphviz简介
Graphviz是开源图形可视化软件。图形可视化是一种将结构信息表示为抽象图和 络图的方法。 它在 络,生物信息学,软件工程,数据库和 页设计,机器学习以及其他技术领域的可视化界面中具有重要的应用。–来自Graphviz官 https://www.graphviz.org/。
实际上它和markdown类似,markdown用纯文本编写文档,而能够转化成格式丰富的html,而graphviz使用dot标记语言来编写,能够被转换成svg,png,jpg等图形格式。甚至可以说,它就是用纯文本来完成画图。
除此之外,它还提供多种语言的api接口,例如,C,python,java,ruby等,也就是说,你可以根据自己的需要通过编写代码来生成你需要的图形。不过文本不准备使用这种方式,而是直接使用dot语言来画我们需要的图。
安装
安装完后就可以直接使用dot命令了。window下还有可视化界面,可以一边编写,一边预览。
如何画二叉树
将上面的内容保存在一个文件,并以.dot结尾,例如tree.dot。然后在命令行执行命令:
其中-Tpng表明要将该dot文件转换为png格式的图片,当然你也可以转换为svg,jpg等其他格式的图片。-o 后面是输出文件名。最后会在目录下发现下面的图片:
是不是很简单/p>
当然在这里有必要对内容进行一些说明。
-
digraph说明这是一个有向图,也就是后面的指向都是有方向的。
-
binaryTree只是起的一个名字。
-
文中用->来表明节点的指向。而style=dotted表明该箭头会是虚线箭头。
-
每行以分 结尾。
一棵漂亮的二叉树
但是你有没有发现一个问题,二叉树各个节点分布并不是那么好看,如果再去掉一个节点,会变成下面这样:
完全没有左右孩子的感觉了对不对怎么办呢幸的是,有人已经做了一个优化。将下面的内容保存为文件binarytree.gvpr或从这里https://gist.github.com/Sciss/2878988 下载:
这样再次执行命令的时候,只要像下面这样的方式使用即可:
最后得到的图形如下:
增加一个节点后变成下面这样:
去掉样式之后变成这样:
是不是好看很多呢/p>
总结
讨论
你有什么好的画图工具迎留言分享。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!