
假定 $f[n]$ 表示有 $n$ 个节点的二叉树,有多少种不同结构。
因此 $f[n] = \sum_{i=0}^{n-1} (f[i] \times f[n-1-i])$,选一个节点作为根节点,那么剩下的 $n-1$ 个节点,分配到两棵子树。
AC代码:
class Solution
{
public:
int numTrees(int n)
{
if(n<=0) return 0;
if(n==1) return 1;
int f[n+1];
f[0]=f[1]=1;
for(int i=2;i<=n;i++)
{
f[i]=0;
for(int j=0;j<=i-1;j++)
{
int k=i-1-j;
f[i]+=f[j]*f[k];
}
}
return f[n];
}
};
来源:https://www.cnblogs.com/dilthey/p/10775744.html