给定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)
答案 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)