leetcode 96 不同的二叉搜索树
前言
题目:96. 不同的二叉搜索树
参考题解:不同的二叉搜索树-代码随想录
提交代码
这道题目没有想出来,看题解之后,自行写了一遍。
核心思想:[1,n]中选取一个值i。i将原区间分成左右子树[1,i-1],[i+1,n]。以i为根节点的二叉搜索树的种数,为左右子树种数的乘积。分别以[1,n]中每个节点为根,进行求和累计。
代码实现如下。
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1,0);
dp[0] = 1;
for(int val=1; val<=n; val++){
for(int i=0; i<val; i++){ // 根据i,将val划分成左右两边。
dp[val] += dp[i]*dp[val-1-i]; // 两边形状的排列组合,进行累加
}
// cout<<dp[val]<<" ";
}
return dp[n];
}
};
还没有评论,来说两句吧...