【leetcode】Unique Binary Search Trees

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  

 

posted @ 2015-01-26 23:20  H5开发技术  阅读(163)  评论(0编辑  收藏  举报