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
[Analysis]
对于大小为n的BST,轮流让 i (0 <= i <= n) 作为根,当i为根时,此时BST的种数 T(i) = T(i-1) * T(n-i),即i的左子树由1~i-1这些数组成,种数为T(i-1),右子树由i+1~n这些数组成,种数为T(n-1)。
[Solution]
class Solution {
public:
int numTrees(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(n <= 1){
return 1;
}
// init
int num[n+1];
memset(num, 0, sizeof(num));
num[0] = 1;
// recursive
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= i; ++j){
num[i] += num[j-1]*num[i-j];
}
}
return num[n];
}
};
说明:版权所有,转载请注明出处。 Coder007的博客