1. 程式人生 > >LeetCode OJ 96. Unique Binary Search Trees

LeetCode OJ 96. Unique Binary Search Trees

sea bin ++ store lan values clas value tree

題目

Given n, how many structurally unique BST‘s (binary search trees) that store values 1 ... n?

Example:

Input: 3 Output: 5 Explanation: 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,由於BST的性質,左右兩邊的節點數可以確定,那麽就可以用同樣的函數去求左右子樹的種類數量,相乘就是以i為根節點的BST的種類數量,遞歸返回的條件是0個節點或1個節點時,這兩種情況下BST的種類數量都是1。

當然直接這麽做會超時,畢竟k個節點的左子樹和n - k - 1個節點的右子樹,n - k - 1個節點的左子樹和k個節點的右子樹得出的結果是一樣的,所以算一遍就好了。。。

下面是AC的代碼:

class Solution {
public:
    int numTrees(int n) {
        if(n == 0){
            return 1;
        }
        if(n == 1){
            return 1;
        }
        int sum = 0;
        for(int i = 1; i <= n / 2; i++){
            sum += numTrees(i - 1) * numTrees(n - i);
        }
        sum *= 2;
        if(n % 2 == 1){
            sum += numTrees(n / 2 + 1 - 1) * numTrees(n - n / 2 - 1);
        }
        return sum;
    }
};

120

LeetCode OJ 96. Unique Binary Search Trees