给定A个不同键的列表,可以形成多少个二进制搜索树,以便
任何子树,其左子树和右子树中的节点数之差为
一个接一个?
无条件二叉搜索树个数的递推关系是

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)

最佳答案

让我们所有的键都在线性数组中。
如果键的数目是偶数,则有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)

关于algorithm - 查找给定n个键的二叉树数量的变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9969409/

10-11 22:33