找到给定n个密钥的二叉树数量的变化

时间:2012-04-01 23:52:39

标签: algorithm binary-tree combinations

给定A个不同键的列表n,可以形成多少个二叉搜索树,使得 任何子树,其左右子树中节点数之间的差异为 最一个一个?

二元搜索树没有条件的数量的递归关系是

f(1) = f(0) = 1;
Let total_trees = 0;
for(int i = 1; i<= n; ++i)
   total_trees += f(i-1) * f(n-i)

任何人都可以帮助改变吗?

我的尝试(这是错误的):

f(1) = f(0) = 1;
Let total_trees = 0;
for(int i = 1; i<= n; ++i)
   total_trees += f(i) * f(i-1)

1 个答案:

答案 0 :(得分:2)

让我们所有的键都是线性数组。 如果键的数量是偶数,则您有2个根的变体 - 2个中心元素。 对于奇数个键,只有一个变量以中心元素为根来满足条件。所以递归看起来像:

f(1)= f(0)= 1

f(2 * k)= f(k-1)* f(k + 1)+ f(k + 1)* f(k-1)= 2 * f(k-1)* f(k 1)

f(2 * k + 1)= f(k)* f(k)