树可视化算法

时间:2011-12-03 14:36:55

标签: algorithm tree visualization

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

4 个答案:

答案 0 :(得分:7)

假设:您希望显示每个节点,使其在子节点上方居中。

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

这导致:

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

因此,在树中进行深度优先遍历以计算每个节点的宽度。要显示,请执行广度优先遍历以逐级绘制树级别。

这是如何解决它的粗略想法。您可能需要根据要渲染树的详细信息来调整宽度计算。

答案 1 :(得分:3)

Tree-mapping可能就是你要找的东西。 Graphviz适用于可视化不专门用于树结构的图形结构。我再也找不到了,但我记得在一篇科学文章中读到树图(我认为voronoi)是表示树结构的最佳选择,关于它们消耗的位置,并且该区域可用于表示某个单位(如字节大小为例子)。

Here是一些替代品。

Here是一篇很好的文章清单和有关该主题的其他信息。

答案 2 :(得分:1)

例如,您可以将DOT语言与graphviz一起使用。

答案 3 :(得分: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 + '    ')

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