【问题标题】:Tree visualization algorithm树可视化算法
【发布时间】:2015-07-07 03:52:01
【问题描述】:

是否有一些用于树形数据结构可视化的算法?我试过谷歌搜索,但找不到任何东西。我很确定这个不是那么简单的任务必须有一些算法。或者有人有什么想法吗?

【问题讨论】:

  • 您在寻找类似 Graphviz 的东西吗? graphviz.org
  • 您确定要寻找一种算法或服务来为您显示它吗?
  • 我必须在我的项目中可视化树,因此我需要算法。

标签: 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 + '    ')
        

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

        【讨论】:

          猜你喜欢
          • 2020-04-29
          • 2017-03-15
          • 2013-12-22
          • 1970-01-01
          • 2012-07-03
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多