C++ 垂直打印树

C++ 垂直打印树,c++,tree,binary-tree,C++,Tree,Binary Tree,你知道怎么打印这样一棵树吗 2 / \ / \ / \ / \ 7 5 / \ \ / \ \ 2 6 9 / \ / 5 8 4 水平解决方案工作得很好,因为您可以使用深度优先搜索(如您所示)从每个子树构造树

你知道怎么打印这样一棵树吗

       2               
      / \       
     /   \      
    /     \     
   /       \    
   7       5       
  / \       \   
 /   \       \  
 2   6       9   
    / \     /   
    5 8     4 

水平解决方案工作得很好,因为您可以使用深度优先搜索(如您所示)从每个子树构造树,这与控制台一次输出一行的方式非常一致

垂直解决方案更为困难,因为您需要知道树末端的所有节点才能计算全宽。因此,您需要分析树,存储数据,然后开始绘图


另一种选择,虽然可能不那么“优雅”(取决于定义),但可以使用类似于curses库的东西,其中显示列和行的概念是可互换的。

问题是,您需要知道树的深度,以确定第一个元素和任何迎面而来的元素的正确水平位置,因此,该算法可能不同于水平算法,并且效率较低“任何人都可以提供优雅的代码…”stackoverflow的目的不是让其他人为您编码。您应该自己编写代码,如果您有特定的问题,请提出特定的问题。换言之:展示你迄今为止所做的尝试以及你的困境。让别人为你转储代码对你没有帮助,你也无法从中学习,如果这样的问题被容忍,因此,很快就会有大量来自不想学习的人的代码转储请求。一种方法是首先递归地计算每个节点的边界框大小以及节点及其两个子节点在框中的位置。然后,初始化根的边界框大小的二维字符数组,并递归地用字符填充。最后,在屏幕上打印出数组。@JASON的可能副本,然后显示您的代码,说明您在哪里看到问题,并询问如何解决问题。从你发布的内容来看,这只是另一个“请为我的问题提供代码”的问题。也许你已经付出了一些努力,但问题并没有说明这一点;它所涉及的只是在确定拓扑结构的第一次访问之后,对输出进行广度优先访问。