用C语言打印树
我想开发一个函数来可视化控制台中的树。例如,我想要这样的输出:用C语言打印树,c,printing,tree,C,Printing,Tree,我想开发一个函数来可视化控制台中的树。例如,我想要这样的输出: 2 / \ / \ / \ / \ 7 5 / \ \ / \ \ 2 6 9 / \ / 5 8 4 我想了很多方法来做到这一点。然而,每个
2
/ \
/ \
/ \
/ \
7 5
/ \ \
/ \ \
2 6 9
/ \ /
5 8 4
我想了很多方法来做到这一点。然而,每个解决方案都需要指向兄弟节点的额外指针。由于我开发了一个红黑树,这意味着我必须在其他函数(如insert()、delete()和rotations)上添加更多的代码行,以便在每次发生更改时设置同级指针。那么,有没有人已经在C中开发了这样一个函数?实际上,这并不难,也不需要对节点结构进行任何修改。您需要遵循以下步骤:
- 确定树的高度和节点值的最大宽度
- 最后一行的宽度为
个字符width=(w+1)*pow(2,h)-1
- 行数为
height=h+(width-w-2)/2
- 为输出分配一个2D字符数组
- 使用精心编制的递归例程,将树绘制到矩阵中。提示:您需要传递
,h
,w
,宽度
,节点ptr,其深度及其水平位置和垂直位置高度
- 对于每个节点,在该位置合成节点值,对于左、右每个非空子节点,计算其相对位置,绘制链接并递归
- 输出2D矩阵
tree
terminal命令可以更容易地表示树,而不是像您现在希望的那样显示它。您的树肯定有一个有趣的排序范例!在等待其他人为您解决之前,先做一点。我肯定我已经做了这件事或类似的事情,因此对于“精心制作”的,请阅读“棘手”的w.r.t水平对齐。通过减去(再加上)左(再加右)节点的增量,可以计算节点值中间的水平位置。这个增量在递归时被减半。垂直增量是水平增量+1。请注意,使用此模式\\\\\\\\\\
可以生成外观更好的输出,并且当水平增量超过2时,可以在下一行生成一个``。这是一个简单的解决方案,但实际上只适用于平衡树;否则,它会占用太多的水平空间。@rici:我不否认,OP的示例确实占用了太多的水平空间,这可以通过鼠标选择区域看到。通过扫描所有白色的初始和最终色谱柱,可以去除部分废物。