有3个节点的有序树的总数

时间:2014-04-16 11:27:02

标签: algorithm data-structures tree binary-tree ordered-tree

我在网上得到的答案很复杂

  1. https://in.answers.yahoo.com/question/index?qid=20100508110438AAbKyMj
  2. http://wiki.answers.com/Q/How_many_ordered_trees_are_possible_with_3_nodes?#slide=2
  3. 我在SO也看到了一个问题,但它对我没什么帮助

    应该是什么答案?

    • 这也是一棵树吗?

          a
         /
        b
       /
      c
      

2 个答案:

答案 0 :(得分:2)

请参考以下link,这是一篇关于计算有序树数量的非常好的论文。

答案 1 :(得分:1)

首先,是的,你的例子是任何合理定义下的树,除非你要求树是完整的"哪个是无处提到的。因此,我怀疑这两个页面上的答案(并不奇怪)是错误的。

其次,我不喜欢问题在第二个链接中表达的方式,因为它没有说清楚平等意味着什么。我们只是在寻找拓扑相同的树(相同的结构,即节点的位置),或者我们正在寻找包含一组三个特定节点的树的相等性,就像在第一个链接中一样。所以,我会在第一个链接中坚持这个问题。

我使用了以下有序树的定义。因为这对于这个问题并不重要,所以我将忽略空树的边缘情况,尽管可以编写定义以包括空树作为候选者(如果需要)。有序树由一个根节点和一个可能为空的列表(有序序列)组成,每个子列表也是一个有序树。

这个定义清楚地包含了你的例子。根是A,它有一个孩子B,它有一个孩子C,没有孩子(一个空子列表)。

让我们递归地处理我们放入树中的节点数N.我们让T(N)是可以从一组固定的N(标记)节点构造的不同有序树的数量。

基本情况:N = 1.如果我们只有一个节点,我们只能构造一个树,其中该节点是根。所以T(1)= 1。

第二种情况:N = 2.根节点有两种选择。其余节点必然是根的第一个也是唯一的子节点。所以T(2)= 2。

第三种情况:N = 3.根节点现在有三种选择。一旦我们选择了根节点,我们又有两种情况:

  • 案例A:根节点有两个子节点,每个子节点都是一个有两个元素的有序树。我们可以通过两种方式订购剩下的两个节点。因此,根节点有两个子节点,有3 * 2 = 6个可能的有序树和三个节点。

  • 案例B:根节点有一个子节点,它必须是一个带有两个元素的有序树。有T(2)= 2种不同的方法我们可以从剩下的两个元素构造有序树,所以总共有3 * 2 = 6个可能的有序树,其中三个节点给定根节点只有一个子节点。 / p>

这两个子句涵盖了所有可能性,它们不重叠(它们将可能的有序树分为三个节点),所以我们可以添加它们:T(3)= 6 + 6 = 12。

如果你对更一般的问题感兴趣,它有点棘手,我不知道答案,也不知道答案是否已知。我会采取的方法是这样的:

一般情况:N。有一个根。剩下的N-1个节点必须位于根的子树中。所以你要看N-1的分区数(将N-1分成组的方式)。然后,将需要查看选择进入每个组的项目的方式的数量。然后,您将查看可以根据每个组中的节点数生成的有序树的数量。

无论如何,还有其他方法。但这可能超出了这个问题的范围。

注意:可能出现的一个问题是我是否忘了计算

之类的东西
    A                      A
   /                        \
  B           and            B
 /                            \
C                              C

但是作为有序树木,这些都是一样的。它们已经显示在这里,好像它们是二叉树(每个节点有两个可能是空子树的子节点)。但是对于有序树,我们只关心根是相同的,并且相应的子节点相等。所以在上面的两个案例中,根都是A.在这两种情况下,根都有一个孩子B.在这两种情况下,那个孩子都有一个孩子C.所以树是相同的。