树形结构可视化算法

8

有没有针对树形数据结构可视化的算法?我尝试搜索了一下,但是找不到任何相关信息。我相信肯定有一些算法能够帮助解决这个并不简单的任务。或者是否有其他人有一些想法?


3
你是否在寻找像Graphviz这样的工具?http://www.graphviz.org/ - Roger Lindsjö
1
你确定你是在寻找算法还是一个能为你展示它的服务? - Duniyadnd
我在项目中需要展示树形结构,因此我需要算法。 - MrProper
4个回答

9
假设您想要每个节点都居中显示在其子节点上方。
为了实现这个目标,需要计算每个节点的宽度。我定义节点宽度为显示整个子树所需的水平空间量,以使其不与左右兄弟子树重叠。
这样做会导致以下结果:
width = 1 + sum(widths of children's nodes)

所以,通过深度优先遍历树来计算每个节点的宽度。为了显示,请通过广度优先遍历逐层绘制树形结构。
这是大致的实现思路。您可能需要根据渲染树形结构的具体细节调整宽度计算。

4

树状图可能是你要找的。Graphviz适用于可视化图结构,但不专门针对树形结构。我记得曾在一篇科学文章中读到过,树状图(我想是Voronoi)是表示树形结构的最佳选择,关于它们占用的空间和可用于表示某些单位的面积(例如字节大小)。

这里有一些替代方案。

这里是有关该主题的一些文章和其他信息的好列表。


1
您可以使用Graphviz的DOT语言。

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 + '    ')

这个算法将每行打印一个树节点。树的每一层都会向右缩进一些空格。该算法将按升序打印项目,但可以通过先处理右子节点来实现降序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接