Unique Binary Search Trees
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
推导出递推公式即可:
对于1个元素来说,f[1]=1;
对于2个元素来说,有两种f[2]=2;
对于3个元素来说,
1) 把1作为根节点,则2,3都连在右边,共有2种
2)把2作为根节点,则1,2必须一个在左边,一个在右边,共1种
3)把3作为根节点,则2,3必须在左边,共有2种
把i作为根节点时,我们有前面i-1个元素放在左边,后面i+1到n个元素放在右边
所以对于f[n]我们有以下的公式:
f[n]=f[n-1]+f[1]f[n-2]+f[2]f[n-3]+......+f[n-2]f[1]+f[n-1];
引入f[0]=1,f[1]=1;
则f[n]=f[0]f[n-1]+f[1]f[n-2]+f[2]f[n-3]+......+f[n-2]f[1]+f[n-1]f[0];
1 class Solution { 2 public: 3 int numTrees(int n) { 4 5 if(n==0||n==1) 6 { 7 return 1; 8 } 9 vector<int> f(n+1); 10 11 f[0]=1; 12 f[1]=1; 13 14 for(int i=2;i<=n;i++) 15 { 16 f[i]=0; 17 for(int j=0;j<i;j++) 18 { 19 f[i]+=f[j]*f[i-j-1]; 20 } 21 } 22 23 return f[n]; 24 } 25 }; 26