Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
For example,
Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3二叉搜索树的特点就是左子树都小于根节点,右子树都大于根节点,当有n个节点时,从1~n的每一个数都有可能是根节点,设F(n)是总数,不妨设当前用第k个点作为根节点,那么左边都是0~k-1的值组成的子树,数量等同于F(k-1),右边都是k+1~n的值组成的子树,数量等同于F(n-k),所以总数是左边的数量*右边的数量,所以F(n)是累加每一个点做根节点时候的总数的和,即F(n)=F(0)*F(n-1)+F(1)*F(n-2)+...+F(n-1)*F(0)。需要注意的是,F(0)的值应该设置为1,才会得到正确的答案。
下面附上代码:
int numTrees(int n) {
int sum[n+1];
memset(sum,0,sizeof(int)*(n+1));
sum[0]=1;
for(int i=1;i<=n;i++)
{
if(i<3)sum[i]=i;
else{
for(int j=1;j<=i;j++)
{
sum[i]+=sum[j-1]*sum[i-j];
}
}
}
return sum[n];
}