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
dp[i] 记录长度为i 时二叉树的种类数。
从1 到 n计算各长度的值,当计算长度为len是所有 节点数小于len的二叉树的值都是已知的。
从1 到len 选择一个数k作为根,所有小于k的数做为左子树,大于k的数做右子树,扫描时所有子树的长度为lenchild为[0 -- len - 1]所以所有dp[lenchild]的值都是已知的
左树可能的情况为dp[k - 1],右树可能的情况为dp[len - k],则dp[len] = {sum(dp[k - 1] * dp[len - k])| k = (123...len)}; dp[0] = 1 表示空树!
class Solution {
public:
int numTrees(int n) {
int *dp = new int[n + 5];
dp[0] = 1;
for(int i = 1; i <= n; i++)
{
dp[i] = 0;
for(int j = 1; j <= i; j++)
{
dp[i] += dp[j - 1] * dp[i - j];
}
}
int rtv = dp[n];
delete[] dp;
return rtv;
}
};