public class Solution {
public int numTrees(int n) {
/*
解题关键:有n个结点的Tree的structure数量等于
左子树结点数等于0 ~ (n-1)时structure数量分别乘以右子树等于(n-1) ~ 0时structure数量之积的和
*/
if(n == 0) return 0;
int[] res = new int[n+1]; //一直要算到有n个结点的Tree的structure数量
res[0] = 1;//有0个结点的Tree的structure数量
res[1] = 1;//有1个结点的Tree的structure数量
for(int i=2;i<=n;i++) //有2~n个结点的Tree的structure数量
{
for(int j=0;j<=i-1;j++)
//有i个结点的Tree的structure数量等于
//左子树结点数等于0 ~ (i-1)时structure数量分别乘以右子树等于(i-1) ~ 0时structure数量之积的和
{
res[i] += res[j]*res[i-j-1]; //左子树结点数等于j时structure数量分别乘以右子树等于i-j-1时structure数量之积
}
}
return res[n];
}
}
Unique Binary Search Trees
最新推荐文章于 2024-08-20 14:34:44 发布