本题源自LeetCode
--------------------------------------------------------------------------------
给定数字3
例如
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
思路:
遍历每一个数字,用数字 i 当做根节点,则递归左子树为1,i-1,右子树为i+1,n。
然后将左子树与每一个右子树配对,一个右子树与每一个左子树配对
返回生成的数量:
int numTrees(int n) {
if(n<=1)
return 1;
int sum=0;
for(int i=1;i<=n;i++){
int left=numTrees(i-1);
int right=numTrees(n-i);
sum+=left*right;
}
return sum;
}
动态规划:
int numTrees(int n) {
if(n<=