不同的二叉搜索树

题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees/
题目描述:

题解:
1.有一个节点时:dp[1] = 1;
2.有两个节点时:dp[2] = dp[0] * dp[1] + dp[1] * dp[0]; //左子树0个节点右子树1个节点 + 左子树1个节点右子树0个节点
3.有三个节点时:dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]; //左子树0个节点右子树2个节点 + 左子树1个节点右子树1个节点 + 左子树2个节点*右子树0个节点

class Solution {
public:
    int numTrees(int n) {
        //dp[i]: 节点值从1到i互不相同的二叉搜索树的个数
        vector<int> dp(n + 1, 0);
        dp[0] = 1;
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= i; j++)
            {
                dp[i] += dp[ j - 1] * dp[i - j];
            }
            
        }
        return dp[n];
    }
};
原文地址:https://www.cnblogs.com/ZigHello/p/15075510.html