题目链接:https://leetcode.com/problems/unique-binary-search-trees/
大意:给出一个正整数n,求n个不同数组成的排序二叉树的个数
思路:二叉排序树的特点是每一个节点,它的左节点比它小,右节点比它大,运用到这一题,可以用动态规划的思想,每一个数都可以作为根节点,如n个数,1~n,当第k个数即k作为根节点时,1-(k-1)在它的左子树,元素数目为k-1,(k+1)-n在它的右子树,元素数目为n-k,此时k作为根节点的所有二叉排序树的总个数是k-1个数和n-k个数时二叉树数目乘积。
class Solution {
public:
int numTrees(int n) {
if(n<1) return 0;
vector<int> cnt;
cnt.push_back(1);
cnt.push_back(1); //n=1
for(int i=2;i<=n;++i){
int sum=0;
for(int j=1;j<=i;++j){
sum+=cnt[j-1]*cnt[i-j];
}
cnt.push_back(sum);
}
return cnt[n];
}
};