刷题、总结,是作为夯实技术基础的重要手段。当我们实现复杂的数据结构,或者要总结一些解题过程中,少不了要将数据结构和过程可视化。画图,可以与理论上的结果比较,更可以让我们的总结更饱满。
这里推荐一款工具——Graphviz,带一种解释性语言dot,可以用简明的代码作图。
1、安装与使用
官网下载,下载之后傻瓜式安装就可以。
使用,查看官网文档。
2、vscode 插件
使用vscode插件,可以在编写完.dot文件后,在vscode中直接渲染图型,而不用使用命令行,解放生产力。
在vscode中搜索graphviz,推荐前两个:Graphviz Interactive Preview,Graphviz Preview。
- Graphviz Interactive Preview
- Graphviz Preview
这里个人对比两个插件后,更偏向于使用Graphviz Preview,该插件渲染后,有导出png图片的功能。
不适用插件,也可以使用命令手动渲染,dot -Tpng 你的代码文件名 -o 输出图片文件名。
3、解决导出图片中文乱码问题
在渲染生成的图片中,如果有中文,导出为PDF或者PNG格式的文件时,可能会出现中文乱码问题(渲染不会有中文问题)。
为解决中文乱码问题,可以设置fontname属性。
digraph {
graph [fontname="Microsoft Yahei"];
edge [fontname="Microsoft Yahei"];
node [fontname="Microsoft Yahei"];
a[label = "文字", style = "dotted"]
}
windows字体的英文名
新細明體:PMingLiU
細明體:MingLiU
標楷體:DFKai-SB
黑体:SimHei
宋体:SimSun
新宋体:NSimSun
仿宋:FangSong
楷体:KaiTi
仿宋_GB2312:FangSong_GB2312
楷体_GB2312:KaiTi_GB2312
微軟正黑體:Microsoft JhengHei
微软雅黑:Microsoft YaHei
4、坑
4.1 NULL补位
在画树结构时,为了显示NULL节点,需要使用NULL节点进行补位,不然树被拉成一条链。
4.2 命名
两个节点名称相同会判定为同一个节点,要注意节点的命名,尤其是NULL补位的节点。