WEI-CHENG CHEN

說明

給定一個整數 n,代表節點數為 1 到 n,請問可以組成多少種不同的 二叉搜尋樹(BST)?

BST:左邊的值 < 根節點 < 右邊的值

解法:用 DP 去解

卡塔蘭數(Catalan Number):以每個數字作為根節點時,左子樹與右子樹的組合數相乘,然後全部加總起來。

class Solution {
public:
    int numTrees(int n) {
        vector<int> dp(n+1, 0);
        dp[0] = 1;
        dp[1] = 1;

        for(int i=2;i<n+1;i++){
            for(int j=1;j<i+1;j++){
                dp[i] += dp[j-1] * dp[i-j];
            }
        }
        return dp[n];
    }
};