/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
//the problem is done, but I still don't have a good understanding of it.I will check it later for a better explaination
class Solution {
private:
vector <TreeNode *> generate(int l, int r){
vector <TreeNode *> ans;
if(l > r){
ans.push_back(NULL);//null must be big letter
}
else{
for(int k = l;k<= r;k++){//for every element generate its subtree as the root
vector <TreeNode *> left = generate(l, k-1);//generate the left subtree
vector <TreeNode *> right = generate(k+1, r);//generate the right subtree
for(int i = 0;i<left.size();i++){
for(int j = 0;j<right.size();j++){
TreeNode *root = new TreeNode(k);
root->left = left[i];
root->right = right[j];
ans.push_back(root);
// the vector stored all the root nodes of the different trees and his child is linked by links.
}
}
}
return ans;
}
}
public:
vector<TreeNode *> generateTrees(int n) {
vector<TreeNode *> ans = generate(1,n);
return ans;
}
};