代码改变世界

96_Unique Binary Search Trees

2016-03-14 11:23  FTD_W  阅读(130)  评论(0编辑  收藏  举报

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~n的数组,求以这些数字能组成多少个二叉搜索树。

1~n,以第i个数为根,则二叉搜索树的数量为 N[1, i - 1] * N[i + 1, n]   (1到i-1个数组成的二叉搜索树个数  *  i+1到n个数组成的二叉搜索树的个数)

该问题就成为了一个动态规划的问题。

设f(i) 为N个数字二叉搜索树的个数。

f(0) = 1;

f(1) = f(0) * f(0) = 1; (左右都是有0个数的二叉搜索树个数)

f(2) = f(0) * f(1) +          (1为根)

   f(1) * f(0)  = 2;       (2为根)

f(3) = f(0) * f(2) +    (1为根)

     f(1) * f(1) +      (2为根)

     f(2) * f(0) = 5;    (3为根)

……

 

f(n) = f(0) * f(n-1) +    (1为根)

    f(1) * f(n-2) +    (2位根)

    ……

    f(n-1) * f(0)       (n为根)

 

int numTrees(int n) {
    int result = 0;
    if(n == 0)
    {
        return 1;
    }
    if(n == 1)
    {
        return 1;
    }
    
    for(int i = 0; i < n; i++)
    {
        result += numTrees(i) * numTrees(n - i - 1);
    }
    
    return result;
}

用递归,效率低,超时