在C中打印树

时间:2016-01-01 20:04:12

标签: c printing tree

我想开发一个在控制台中可视化树的功能。例如,我喜欢这样的输出:

class YourModelManager(models.Manager):
    def get_queryset(self):
        qs = super(YourModelManager, self).get_queryset()
        return qs.annotate(roll_split=Substr('roll_numb', 5)).order_by('roll_split')

class YourModel(models.Model):
    objects = YourModelManager()

我想过很多方法可以做到这一点。但是,每个解决方案都需要额外指向兄弟姐妹。由于我开发了一个红黑树,这意味着我必须在其他函数(如insert(),delete()和旋转)上添加更多代码行,以便在每次更改时设置兄弟指针。那么,是否有人已经在C中开发了这样的功能?

1 个答案:

答案 0 :(得分:1)

实际上,它并不困难,不需要对节点结构进行任何修改。您需要按照以下步骤操作:

  • 确定h树的高度,w节点值的最大宽度。
  • 最后一行的宽度为width = (w+1) * pow(2, h) - 1个字符。
  • 行数为height = h + (width-w-2) / 2
  • 为输出分配2D char数组。
  • 使用精心设计的递归例程,树绘制到矩阵中。提示:您需要传递hwwidthheight,节点ptr,其深度及其水平位置和垂直位置。
  • 为每个节点,在该位置组成节点值,并为每个非空子项左右计算其相对位置,绘制链接并递归。
  • 输出2D矩阵。