雅乐网

计算机技术、学习成长

计算机 » 数据结构 » 二叉树的图形化显示

二叉树的图形化显示

二叉树的图形化显示最主要的一步就是计算每个结点的位置。得到位置后,可以使用命令行或者图形界面来显示。应该说使用图形界面可以在任意坐标处画图,实现起来要比命令行简单很多。本文介绍如何计算结点的横纵坐标,并分别给出命令行和基于QT的图形界面显示的C++代码。

本文中的二叉树数据结构代码见 常用数据结构C++实现(3):二叉树和二叉搜索树 | 雅乐网

福利:本文附带Qt图形显示二叉树、平衡搜索树和红黑树的源代码

计算结点位置

观察一棵二叉树

scrn20160114100545

从水平方向来看,从左到右的结点是按照中序遍历的次序。

从垂直方向来看,结点的深度就是该结点到树根的距离。

计算深度

先通过parent指针一直遍历到树根,求出根节点深度。然后孩子节点深度就等于它的父节点深度+1 ,这要求更新结点的顺序要按照深度来进行,而层次遍历正好符合这一要求。

计算水平位置

可以稍微改写中序遍历,设置变量记录结点的访问次序,得到每个结点的相对次序。

在此前的二叉树中有一个现成的succ()接口,用来返回中序遍历意义下的下一个结点,利用这个接口,可以方便的计算每个结点的水平位置:

使用QT图形化显示二叉树

由于有些小伙伴要源代码,Qt部分的完整代码下载:包含显示搜索树、平衡树和红黑树三个图形界面源代码

PaintBinTree

使用QT中的paintevent来画图,首先从QWidget继承一个类,然后重写paintEvent函数。

下面是画图函数

在主窗口界面,实现插入和删除,之后调用update来更新。

最终运行结果如下图

二叉树:

scrn20160114104523

红黑树:

使用命令行显示二叉树

命令行的输出必须从左到右,从上到下,这带来了不必要的繁琐。

运行结果如图

scrn20160114105012

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
http://www.yalewoo.com/binary_tree_graphical_display.html

上一篇:

下一篇:

文章《二叉树的图形化显示》共有10条评论:

  1. 匿名

    想问一下博主,QT部分代码如果构造的是一个对称的二叉树的画,在删除根节点的时候会出现段错误,要怎么修改

  2. 匿名

    请问有QT部分的完整代码么?

匿名进行回复 取消回复

验证码*: 3 + 1 =