码迷,mamicode.com
首页 > 其他好文 > 详细

Unique Binary Search Trees

时间:2014-08-18 00:03:13      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   io   strong   for   ar   

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

思路:若取第i个作为顶点,其对应二叉树个数为:numTrees(i-1)*numTrees(n-i)。加和所有不同i即可求解该题。此处,为了方便递归,令numTrees(0)取1。递归解法如下:

 1 class Solution {
 2 public:
 3     int numTrees( int n ) {
 4         if( n == 0 ) { return 1; }
 5         if( n <= 2 ) { return n; }
 6         int num = 0;
 7         for( int i = 1; i <= n/2; ++i ) {
 8             num += 2 * numTrees( i-1 ) * numTrees( n-i );
 9         }
10         if( n % 2 == 1 ) { num += numTrees( n/2 ) * numTrees( n/2 ); }
11         return num;
12     }
13 };

使用num[i]保存numTrees(i),动态规划解法如下:

 1 class Solution {
 2 public:
 3     int numTrees(int n) {
 4         if( n <= 2 ) { return n; }
 5         vector<int> num( n, 0 );
 6         num[0] = 1; num[1] = 2;
 7         for( int i = 2; i < n; ++i ) {
 8             num[i] += 2*num[i-1];
 9             for( int j = 1; j < i; ++j ) {
10                 num[i] += num[j-1] * num[i-j-1];
11             }
12         }
13         return num.back();
14     }
15 };

结果满足卡特兰递归式:h(n) = h(0)*h(n-1) + h(1)*h(n-2) + h(2)*h(n-3) + … + h(i)*h(n-i-1) + … + h(n-1)*h(0) ( n >= 2 ),且h(0) = 1,h(1) = 1。另一种递归形式为:h(n) = h(n-1) * (4*n-2) / (n+1)。

 1 class Solution {
 2 public:
 3     int numTrees( int n ) {
 4         if( n <= 1 ) { return n; }
 5         int catalan = 1;
 6         for( int i = 2; i <= n; ++i ) {
 7             catalan = catalan * (4*i-2) / (i+1);
 8         }
 9         return catalan;
10     }
11 };

 

Unique Binary Search Trees,布布扣,bubuko.com

Unique Binary Search Trees

标签:style   blog   color   使用   io   strong   for   ar   

原文地址:http://www.cnblogs.com/moderate-fish/p/3918461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!