二叉树的可视化

在我前面的一篇博文数据结构之红黑树中,提到了数据结构之可视化的重要性。 因为如果我们能将二叉树可视化,也能提高加快调试,减少bug。原文给出了print_tree函数,会打印二叉树,但是旋转了90度,不优美,不友好。最近学习了下Graphviz这个软件,学了下怎么用这个软件绘制图片,基本解决了二叉树的可视化问题。

我还是以我的红黑树代码为例子,写测试代码,看下如何将我们插入产生的红黑树可视化。

我们看下代码:

tree2dot接受一个二叉树和一个文件名作为入参。负责创建文件 关闭文件和填写dot文件有向图的格式头和尾。

__tree2dot是递归调用,添加父节点到子节点的有向连接。我们因为是红黑树,所以添加了这部分处理红黑结点的代码:

这部分代码的作用对于黑节点,采用box类型表示节点,对于红节点,采用默认的椭圆图形。

比较才能看到进步,我们比较下新旧两种方法的输出:

24774106_13622082049ngr

 

在看下生成的dot文件(Ubuntu下用XDot打开)

24774106_1362208373w5d8

 

下面这种的优越性,一目了然。这个方法目前有个缺点是没有将NULL节点处理,导致421看不出是386左孩子还是右孩子,我们改进下:

我们将NULL节点处理成六边形,这样就能完整的看出红黑树的情况了,请看生成的dot文件:

24774106_1362209439luon

 

完整的代码在我的github上 ,可以去下面路径去取:

https://github.com/manuscola/rbtree

参考文献:

1 Drawing graphs with dot

1 2 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部