Given an integer n
, return the number of structurally unique BST's (binary search trees) which has exactly n
nodes of unique values from 1
to n
.
Example 1:
Input: n = 3 Output: 5
Example 2:
Input: n = 1 Output: 1
Constraints:
1 <= n <= 19
题目:给一个正整数n,求由节点1~n组成的二叉搜索树结构有几个
思路:由于是二叉搜索树,因此只要根节点确定了,左右子树节点个数也就确定。从1到n遍历,分别从1到n作为根节点,求左右子树的结构个数相乘。最后的加和即为结果。为减少重复运算,用vector数组dp记录i个节点的结构数。代码:
class Solution {
private:
vector<int> dp;
public:
int helper(int n){
if(dp[n] > 0) return dp[n];
for(int i = 0; i<n; i++){
dp[n] += helper(i) * helper(n-i-1);
}
return dp[n];
}
int numTrees(int n) {
dp.resize(n+1, 0);
dp[0] = 1;
return helper(n);
}
};