【问题标题】:Drawing trees without any constraint on degrees绘制没有度数限制的树
【发布时间】:2013-12-02 03:58:22
【问题描述】:

我正在研究解决树问题的分布式算法的可视化。

我必须绘制一个作为输入的有根树。

目前,如果每个节点最多有 2 个子节点,我知道如何处理这种情况。在这种情况下,对于每个节点v,我将v 绘制为坐标为(x(v), x(y)) 的圆,其中:

x(v) := index of v in the inorder traversal
y(v) := distance from v to the root

这很好用(当然树的宽度很大,但这并没有给我带来太多困扰)但最多只适用于二叉树。

请建议我应该对一般树使用什么算法。我唯一的要求是绘图必须是平面的。

编辑:

the simpler algorithm is to implement, the better

【问题讨论】:

  • 您可能会发现这个link 很有用。本文最后讨论了 m 叉树的情况。
  • @rrufai 请发表评论作为答案,我会接受。
  • 完成。将尝试随着时间的推移对其进行扩展,使其尽可能独立。

标签: algorithm tree draw


【解决方案1】:

引用 Bill Mill 的文章"Drawing Presentable Trees",m-ary 树绘制算法的核心步骤如下:

  1. 对树进行后序遍历
  2. 如果节点是叶子,给它一个 x 坐标 0
  3. 否则,对于它的每个孩子,将孩子放置在尽可能靠近其左侧兄弟姐妹的位置
  4. 将父节点放置在其最左侧和最右侧子节点的中间

上述步骤有一个问题,左侧的子树导致树的其余部分被推到右侧并导致不平衡。文章实现了以下原理来解决问题:

原则6:父节点的子节点要等间距。

有一个链接指向文章中给出的这些步骤的Python implementation

【讨论】:

    【解决方案2】:

    This is a fairly well-known paper(我想起来了)在绘制任何程度的树时。

    更简单,an old blog post of mine 以 ASCII 打印树。如果您想要快速而肮脏的东西,您可以采用这种方法。

    【讨论】:

    • 这些链接很棒,但如果没有它们,您的回答将一文不值。请尝试包含概念摘要以改进您的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多