【LeetCode】96 - 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
 
Solution 1:  递归
 1 class Solution {
 2 public:
 3     int numTrees(int n) {
 4         if(n == 0)
 5             return 1;
 6         else if(n == 1)
 7             return 1;
 8         else
 9         {
10             int count = 0;
11             for(int i = 0; i <= (n-1)/2; i ++)
12             {
13                 if(i < n-1-i)
14                     count += 2*numTrees(i)*numTrees(n-1-i);
15                 else
16                     count += numTrees(i)*numTrees(n-1-i);
17             }
18             return count;
19         }
20     }
21 };

 

Solution 2: dynamic programming . Base case: n==0, n==1时,f(n)==1, f(n)=∑f(i)*f(n-i-1)。即以第i个为根节点,左右子树数目相乘 

class Solution {
public:
    int numTrees(int n) {
        if(n<2)return 1;
        
        vector<int> v(n+1, 0);
        v[0]=1;
        v[1]=1;
        for(int i=2;i<n+1;i++){
            for(int j=0;j<i;j++){
                v[i]+=v[j]*v[i-1-j];
            }
        }
        return v[n];
    }
};

 


posted @ 2015-08-11 00:01  irun  阅读(163)  评论(0编辑  收藏  举报