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=4时,根节点有为1,2,3,4的4种情况,当根节点为3时,左子树是由1,2两个元素构成的二叉搜索树,右子树是由4一个元素构成的二叉搜索树,根节点为3时的数量等于左边两个元素构成搜索二叉树的数量dp[2]乘以右边一个元素构成搜索二叉树的数量dp[1],当n=4时,只要像这样把根节点为1,2,3,4四种情况分别加起来就好了。
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1,0);
dp[0]=dp[1]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<=i;j++)
dp[i]+=dp[j-1]*dp[i-j];
return dp[n];
}
};