我在互联网上得到了不同的答案
- https://in.answers.yahoo.com/question/index?qid=20100508110438AAbKyMj
- http://wiki.answers.com/Q/How_many_ordered_trees_are_possible_with_3_nodes?#slide=2
我在SO上看到了一个问题,但是它并没有对我有太大帮助。
应该怎么回答呢?
Also is this a tree?
a / b / c
我在互联网上得到了不同的答案
我在SO上看到了一个问题,但是它并没有对我有太大帮助。
应该怎么回答呢?
Also is this a tree?
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种可能的三个节点的有序树。
这两个子情况涵盖了所有可能性,并且它们不重叠(它们将可能的三个节点的有序树划分为两部分),因此我们只需将它们相加:T(3) = 6 + 6 = 12。
如果您对更一般的问题感兴趣,那么会稍微棘手一些,我也不知道答案,也不知道是否已知答案。我采取的方法大致如下:
一般情况:N个节点,只有一个根节点。其余的N-1个节点必须位于根节点的子树中。因此,您需要查看N-1的划分数(将N-1拆分成组的方式数)。然后您需要考虑选择放入每个组的项目的方法数。接下来,您需要查看可以从每个组中的节点数制作的有序树的数量。 A A
/ \
B and B
/ \
C C
但是作为有序树,它们是相同的。它们被显示成二叉树的形式(每个节点有两个可能为空的子树)。但对于有序树,我们只关心根节点是否相同以及对应的子节点是否相等。因此,在上面的两种情况中,根节点都是A。在两种情况下,根节点都有一个单独的子节点B。在两种情况下,该子节点都有一个单独的子节点C。因此,这两棵树是相同的。