有效绘制树木的算法?

use*_*358 11 algorithm tree drawing

我需要在C#中绘制一个公司结构树(类似于家谱).所有辅助代码都在那里.它是有色的,互动的和花哨的.唯一的麻烦是算法实际上决定了每个节点放在哪里给了我很多的悲伤.

目前,盒子的大小是100x50,我有一个叫做StaffNode特定x,y坐标的工作人员的课程.

算法只需List<StaffNode>要用适当的x和y 创建一个.

这非常棘手.

基本上,算法是沿公司结构递归的,所以左 - >右,然后沿着树向上 - >向下.显然,如果两个节点在彼此之上是很糟糕的.

我可以想到一些算法可能产生这样的东西:

          *
    o         O
o o o o o     O
o         O O O O O
                O
Run Code Online (Sandbox Code Playgroud)

这样的事情会更好,因为树很大而且空间非常有限:

       *
    o     O
o o o o o O
o     O O O O O
            O
Run Code Online (Sandbox Code Playgroud)

你们中的任何人以前都要画这样的树吗?如果你有,我相信你已经遇到了很多障碍.有小费吗?到目前为止,我已经花了一整天时间.

tem*_*def 15

有许多用于绘制树木的好算法,每种算法都展示了树木的一些不同属性.如果要展示层次结构,WPF的这段代码将绘制层次结构.有关如何绘制图形和树木的更一般性讨论,请参阅这些讲座幻灯片,详细介绍许多此类算法.还有这些优秀的幻灯片覆盖类似的材料.

希望这可以帮助!

  • 那绝对是完美的!正是我需要的.它使用Reingold-Tilford算法. (2认同)
  • @ user1002358感谢您的评论.我无法从这里列出的答案中理解算法,但谷歌搜索"Reingold-Tilford算法"引导我[问题](http://stackoverflow.com/q/13128750/302677),我发现它更有用.我还总结了编码算法的步骤[这里](http://rachel53461.wordpress.com/2014/04/20/algorithm-for-drawing-trees/)以防其他人正在寻找一个简单的解释 (2认同)