问题描述:
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
基本思路:
分别考虑左右子树对应的方法数,然后对于左右子树方法数相乘(左右子树节点数为0的单独处理)。可以递归求子树的个数,也可以用数组记录已知n个节点的子树的方法数。
代码:
int numTrees(int n) { //C++
if(n == 1)
return 1;
if(n == 2)
return 2;
vector<int> record(n+1,0);
record[0] = 0;
record[1] = 1;
record[2] = 2;
for(int i = 3; i <= n; i++)
{
int sum = 0;
int k; //left nodes
for(k = 0; k < i; k++)
{
int temp;
if(k == 0 )
temp = record[i-k-1];
else if(i-k-1 == 0)
temp = record[k];
else temp = record[k]*record[i-k-1];
sum += temp;
}
record[i] = sum;
}
return record[n];
}