当前位置: 首页 > 知识库问答 >
问题:

如何用任意数量的孩子画一棵树?

狄冥夜
2023-03-14

我正在努力想出一种算法,它允许我绘制一个像数据结构一样的树,其中每个节点可以有0..n个子节点。对我来说,问题是,我不知道我必须放置节点多远,以便子节点不会重叠。

在本例中,“d”是“b”的子级,“g”是“e”的子,当我在给定树的总宽度的情况下,将子级均匀分布在其父级上方时,它们在x轴上重叠。

              g g g g g g g g   (9 nodes)
              \ \ \ \ | / / /
d d d d d d d d d     e         (10 nodes)
\ \ \ \ / / / / /     |
       b              c         (2 nodes)
           \      /
              a                 (1 node)

节点不以任何方式排序。所以它实际上更像一个必须看起来像树的图。

共有1个答案

伯鸿达
2023-03-14

为了确定间距,我提出了一种由三个主要步骤组成的算法。我们将使用图论的语言:要绘制的树由节点abc组成。。。

  • 第1步。我们从确定每个节点的层开始,该层测量到根节点的距离。我们假设您已将树准备为邻接列表,该列表主要是一个包含2列的表,每个边缘的起始节点和结束节点。在给定的示例中,我们有a-ba-cb-d1,...b-d9c-ee-g1,...e-g9。注意节点命名方案,它显式地解析了dg的多重性。我们最终得到了这样的表:
# node: layer
a: 0
b: 1
c: 1
d1: 2
d2: 2
...
d9: 2
e: 2
g1: 3
g2: 3
...
g9: 3
    < li >步骤2。我们还必须确定和跟踪每层的节点总数以及每层的叶节点数,即没有任何后继节点的节点数。在邻接表中,叶子很容易被识别为节点标识符,它只出现在第二列,而不出现在第一列。在给定的例子中,层0和1没有叶子,层2有9个叶子,即< code>d1...< code>d9,而第三层只剩下< code>e1...< code>e9在此阶段,我们已经构建了下表:
# layer: leave nodes, overall nodes, non-leave nodes (in this layer)
0: 0, 1, 1
1: 0, 2, 2
2: 9, 10, 1
3: 9, 0, 0
    < li >步骤3。最后,我们用一列累积叶子计数来扩展刚刚创建的表。我们所做的就是合计我们已经遇到了多少个叶节点:
# layer: cumulative nodes
0: 0
1: 0
2: 9
3: 18

结果是18,这是显示无重叠树所需的列数。

 类似资料:
  • 我必须使用绘制一个可呈现的树。你可以在图片中看到 应满足此链接中陈述的所有原则。 原则是: 原则1:树的边不应该互相交叉。 原则2:相同深度的所有节点应绘制在同一水平线上。这有助于清除树的结构。 原则3:树木的绘制应尽可能窄。 原则4:父母应以子女为中心。 原则5:子树无论位于树中的哪个位置,都应以相同的方式绘制。 原则 6:父节点的子节点应均匀分布。 如何计算每个节点的X、Y位置?

  • 这样不仅可以将转移页面的子元素放入数组,还可以将子元素的子元素放入数组。

  • 问题内容: 我有一个字符串数组,我正在尝试通过Firebase填充它。它是一个聊天应用程序,当用户创建房间时,他或她将房间命名。当用户登录并进入登录页面时,它会查询他或她正在参与的所有房间,我希望该房间能填充表格视图。在firebase文档中,我找到了childrenCount,但似乎无法正常工作。到目前为止,这是我尝试过的 我得到一个错误,即计数是仅获得属性。我如何填充该数组计数? 问题答案:

  • 我想创建一个方法,它可以具有任意数量的参数和任何数据类型的任何方法。 为。我想动态调用以下所有方法void method1(int x,int y)void method2(int x,String y)void method3(Float x,Long y,String z) 我正在使用反射来这样做。现在我讨论了如何在调用这个动态方法的过程中向这些方法传递参数。我做了多远... 如何调用MyMe

  • 有人朝他扔鲜花 有人朝他扔泥巴 他不接鲜花也不在意泥巴 他用泥巴种鲜花 要把烦心事都丢掉腾出地方装鲜花 我口袋只剩玫瑰一片 可此行又山高路远 人的内心不种满鲜花就会长满野草 贫瘠的荒漠会开满鲜花 尽头的街角有人等你回家 你是记忆中最美的春天 是我难以再回去的昨天 你像鲜花那样的绽放 让我心动不已