给定一系列要插入到空二进制搜索树中的值,可以将多少个方法重新排列以到达同一棵树?

时间:2017-02-06 05:32:25

标签: tree binary-search-tree

让我们说序列是8,3,10,7,9,12,5,11,4,6。结果树看起来像:

       8
     /   \
    3    10
     \   / \
      7  9  12
     /      / 
    5      11
   / \
  4   6

这个序列可以重新排序多少种可能的方法,以便最终结果是完全相同的树?例如,8,10,3,7,9,12,5,11,4,6是一个答案。

到目前为止,我认为对于每个子树,两个兄弟姐妹的顺序并不重要。所以2,1,3与2,3,1相同。这适用于树中的每个父子。我很难搞清楚递归和组合。

1 个答案:

答案 0 :(得分:0)

假设树中的所有条目都不同,答案由树的钩长公式给出。它只取决于树的形状。

它的内容如下:

可能的数组= n! / product(子树的节点数)

其中n是完整树的节点数。 例如,对于您的树:

false
true
false
true
true
false

结果是10! /(10 * 5 * 4 * 4 * 3 * 2 * 1 * 1 * 1 * 1)= 756

这是Knuth Art of Computer Programming第3卷:搜索和排序。