95. Unique Binary Search Trees II
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode*> res;
if(n == 0)
return res;
return generate_subtree(1, n);
}
vector<TreeNode*> generate_subtree(int start, int end){
vector<TreeNode*> vRoot;
if(start > end){
vRoot.push_back(NULL); //必须写为空!!!!
return vRoot;
}
for(int i = start; i <= end; i++){
vector<TreeNode*> vLeft;
vector<TreeNode*> vRight;
vLeft = generate_subtree(start, i - 1);
vRight = generate_subtree(i + 1, end);
for(int j = 0; j < vLeft.size(); j++){
for(int k = 0; k < vRight.size(); k++){
TreeNode* cur = new TreeNode(i);
cur->left = vLeft[j];
cur->right = vRight[k];
vRoot.push_back(cur);
}
}
}
return vRoot;
}
};