2011-12-03 108 views
5

树数据结构可视化有一些算法吗?我尝试了谷歌搜索,但没有找到任何。我很确定这不是那么简单的任务必须有一些算法。或者任何人有一些想法?树可视化算法

+3

你在找什么像Graphviz? http://www.graphviz.org/ –

+1

你确定你正在寻找一种算法或服务来显示它吗? – Duniyadnd

+0

我必须在我的项目中可视化树,因此我需要算法。 – MrProper

回答

7

假设:您希望显示每个节点,使其位于其子节点上方。

为了达到此目的,计算每个节点的宽度,我将其定义为显示此节点的整个子树所需的水平空间量,使其不会与其左侧或右侧兄弟的子树重叠。

这导致:

width = 1 + sum(widths of children's nodes) 

所以,做一个深度优先遍历整个树来计算每个节点的宽度。要显示,请先进行宽度优先遍历,逐级绘制树。

这是如何去做的大概想法。您可能想调整宽度计算,具体取决于您想要渲染树的细节。

1

例如,您可以使用DOT语言和graphviz。

3

Tree-mapping可能是你在找什么。 Graphviz适用于可视化不专门用于树结构的图形结构。我再也找不到它了,但是我记得在一篇科学文章中读到过,treemaps(我认为voronoi)最适合表示树结构,关于它们消耗的位置和区域可以用来表示某个单位(比如字节大小例)。

Here是一些替代方案。

Here是关于该主题的文章和其他信息的良好列表。

0

您还可以从左到右打印树,即最左侧的根,第一级右侧的树等等。你会发现树上印有每个级别的“自己的专栏”。该算法有点像这样:

print(node, spaces): 
    if node has left child: 
     print(left_child, spaces + ' ') 
    print spaces + node + '\n' 
    if node has right child: 
     print(right_child, spaces + ' ') 

该算法将每行打印一个树节点。树的每个级别都会被一些空格向右缩进。此算法将按升序打印项目,但可以通过首先处理正确的小孩来实现降序。