给定从1到n的整数,确定用这些数字可以构造多少个有效的二进制堆。

Example: 1 2 3 4

有效的最小堆为:{1 2 3 4}{1 3 2 4}{1 2 4 3}
所以答案是3

最佳答案

提示:
二进制堆具有预定义的节点数和定义良好的结构(完整树)
递归地思考这个问题。
“选择”哪一个非根数字转到左子树,哪一个转到右子树-并递归地调用子树。

f(1) = 1 //no sons
f(2) = f(1) * 1 //one son and a root
//chose which element will go to the left sub-tree, and recursively invoke.
f(3) = Chose(2,1)* f(1) * f(1) * 1
f(4) = Chose(3,2)*f(2) * f(1) * 1 //chose which 2 elements will go to the left sub tree
...

这个问题被标记为家庭作业,所以我把找出一般案件的确切数字留给你。

07-26 01:50