Tree 给定要插入到空二叉搜索树中的值序列,可以通过多少种方式重新排列该序列以到达同一棵树?
假设序列是8,3,10,7,9,12,5,11,4,6。生成的树如下所示:Tree 给定要插入到空二叉搜索树中的值序列,可以通过多少种方式重新排列该序列以到达同一棵树?,tree,binary-search-tree,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
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是一样的。这将适用于树中的每个父子关系。我只是很难搞清楚递归和组合 假设树中的所有条目都不同,答案由树的钩长公式给出。这只取决于树的形状 内容如下: 可能的阵列数=n!/乘积(子树的节点数) 其中n是完整树的节点数。 例如,对于您的树:
10
/ \
5 4
\ / \
4 1 2
/ /
3 1
/ \
1 1
结果是10!/(10*5*4*4*3*2*1*1*1=756
这是Knuth计算机编程艺术第3卷:搜索和排序的练习