接上回,简单的在屏幕上面显示二叉树。
方案
显示效果设计
1、显示结构采用满二叉树的结构来显示,不管有多少节点,显示结构只和深度有关(没有的节点,显示空白)
2、显示大小、间隔,以二叉树最后一层为标准,不管二叉树多深,最后一层相邻两个节点距离不变,该距离可定制
3、不同节点之间不应当重叠
实现关键步骤
1、该二叉树的显示和层数有关,层数约大,上层的间距越大,越小,下层的间距越小,
不同层数的二叉树的最终显示,最后一层的间隔都是一样的。
实现:固定间隔,因此二叉树的总宽度近视等于: 间隔 * 最后一层的节点个数
2、坐标问题。
a、Y坐标位置: 节点的深度可以作为印时的Y坐标
b、X坐标位置:由于二叉树每个节点之间的距离都可以安排为上一层节点的1/2,而左右子节点到该节点的距离又相等。所以可以如下安排:
X坐标:
1
1-1/2 1+1/2
1/2-1/4 1/2+1/4 3/2-1/4 3/2+1/4
3、打印。由于打印是按行的因此需要实现按层遍历,
借助队列可以实现按层打印
伪代码:
首节点放入队列
while(队列不为空)
弹出并打印当前节点
左右孩子放入队列
实现
1、相关定义
typedef struct BinNodetag
{
BinNod