LeetCode 95. Unique Binary Search Trees II
本博客转载自:[1]https://segmentfault.com/a/1190000007443961
[2]http://www.cnblogs.com/grandyang/p/4301096.html
Solution1:
转载自链接[1]。思路:递归的方式处理,对于N各节点的二叉树,分别对应的就是左边i个,右边N-i-1个,根节点一个。i的取值范围是0到N-1. 初始为0个的场景即可。这里为了降低一次递归,把一个的场景也放在初始值里。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
if (n == 0) return vector<TreeNode* >();
return generateTrees(1, n);
}
vector<TreeNode*> generateTrees(int start, int end) {
vector<TreeNode*> subTree;
if (start > end) {
subTree.push_back(NULL);
return subTree;
}
for (int k = start; k <= end; k++) {
vector<TreeNode*> left = generateTrees(start, k - 1);
vector<TreeNode*> right = generateTrees(k + 1, end);
for (auto i : left) {
for (auto j : right) {
TreeNode* root = new TreeNode(k);
root->left = i;
root->right = j;
subTree.push_back(root);
}
}
}
return subTree;
}
};