164. Unique Binary Search Trees II
class Solution {
public:
/**
* @paramn n: An integer
* @return: A list of root
*/
vector<TreeNode *> generateTrees(int n) {
// write your code here
return generate(0, n - 1);
}
vector<TreeNode *> generate(int start, int end){
vector<TreeNode *> res;
if(start > end){
res.push_back(NULL);
return res;
}
for(int i = start; i <= end; i++){
vector<TreeNode *> left = generate(start, i - 1);
vector<TreeNode *> right = generate(i + 1, end);
for(int j = 0; j < left.size(); j++){
for(int k = 0; k < right.size(); k++){
TreeNode * root = new TreeNode(i + 1);
res.push_back(root);
root->left = left[j];
root->right = right[k];
}
}
}
}
};
Comments
Post a Comment