Leetcode - 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

思路:递归,由于是二叉查找树,先选择任一结点根结点,假设为结点i,则[1,i-1]范围的结点为结点i的左子树结点,[i+1,n]范围的结点为结点i的右子树结点,则以结点i为根结点的BST个数为左,右子树可构成BST个数的乘积,基于这个思路,可以写出以下递归程序。
 1 class Solution
 2 {
 3 public:
 4     int numTrees1(int start, int end)
 5     {
 6         if (start >= end)
 7         {
 8             return 1;
 9         }
10         
11         int totalNum = 0;
12         for (int i = start; i <= end; i++)
13         {
14             totalNum += numTrees1(start, i-1) * numTrees1(i+1, end);
15         }
16         return totalNum;
17     }
18 
19     int numTrees(int n)
20     {
21         return numTrees1(1, n);
22     }
23 };

 

posted @ 2014-11-18 15:50  bournet  阅读(123)  评论(0编辑  收藏  举报