题目:Unique Binary Search Trees
找值为1->n的所有可能的二叉树。
如果是找可能的数量而不需要列出所有可能时,可以用动态规划。
思路如下:
动态规划法:f(n)表示该子树中有n个数字可用来组成树枝
f(0) = 1;空树
f(1) = 1;树根
f(2) = f(0)*f(1) + f(1)*f(0);当左子树有0个数,右子树右1个数的情况和当左子树有1个数,右子树有0个数的情况;
f(3) = f(0)*f(2) + f(1)*f(1) + f(2)*f(0);
...
f(n) = f(0)*f(n-1) + f(1)*f(n-2) + ... + f(n-1)*f(0);
注意事项:
1.外循环从2开始,内循环不能超过外循环的循环变量;
2。每次开始内循环时,将累加的变量清零。
int numTrees2(int n){
if (n < 2)return 1;
vector<int> nums;
nums.push_back(1);
nums.push_back(1);
for (int i = 2; i <= n; i++)
{
int num = 0;
for (int j = 0; j < i; j++)
{
num += nums[j] * nums[i - j - 1];
}
nums.push_back(num);
}
return nums[n];
}
同类型的题目:http://www.cnblogs.com/yeqluofwupheng/p/6755645.html