题干:
代码:
class Solution {
public:
int numTrees(int n) {
vector<int>dp(n + 1);
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i <= n; i++){
for(int j = 1; j <= i; j++){
dp[i] += dp[j - 1] * dp[i - j];
}
}
return dp[n];
}
};
dp[i]含义:节点数为i时有多少种可能。
dp[i]:n为i时二叉搜索树种类
由前面得到后面的,所以从前往后遍历
不需要考虑节点值的问题,只要看左右节点个数就可以了!