【问题标题】:Tree visualization algorithm树可视化算法
【发布时间】:2015-07-07 03:52:01
【问题描述】:
是否有一些用于树形数据结构可视化的算法?我试过谷歌搜索,但找不到任何东西。我很确定这个不是那么简单的任务必须有一些算法。或者有人有什么想法吗?
【问题讨论】:
标签:
algorithm
tree
visualization
【解决方案1】:
假设:您希望显示每个节点,使其位于其子节点上方的中心。
为此,计算每个节点的宽度,我将其定义为显示该节点的整个子树所需的水平空间量,这样它就不会与其左右兄弟的子树重叠。
这导致:
width = 1 + sum(widths of children's nodes)
因此,对树进行深度优先遍历以计算每个节点的宽度。要显示,请进行广度优先遍历以逐级绘制树。
这是关于如何去做的粗略想法。您可能需要根据您希望如何渲染树的详细信息来调整宽度计算。
【解决方案2】:
Tree-mapping 可能是您正在寻找的。 Graphviz 非常适合可视化不专门用于树结构的图结构。我再也找不到它了,但我记得在一篇科学文章中读到树图(我认为 voronoi)最适合表示树结构,关于它们消耗的位置和区域可用于表示某个单位(如字节大小示例)。
Here 是一些替代品。
Here 是关于该主题的文章和其他信息的良好列表。
【解决方案3】:
例如,您可以将 DOT 语言与 graphviz 一起使用。
【解决方案4】:
您还可以从左到右打印树,即最左边的根,右边的第一级等等。你会发现在它自己的“列”上印有每个级别的树。算法有点像这样:
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 + ' ')
此算法将每行打印一个树节点。树的每一层都会向右缩进一些空格。该算法会按升序打印项目,但降序可以通过先处理右孩子来实现。