classSolution{public:vector<TreeNode*>genTreeNodes(intleft,intright){vector<TreeNode*>nodes;nodes.clear();if(left>right){nodes.push_back(NULL);returnnodes;}if(left==right){TreeNode*node=newTreeNode(left);nodes.push_back(node);returnnodes;}for(inti=left;i<=right;i++){vector<TreeNode*>lefts,rights;lefts.clear();rights.clear();lefts=genTreeNodes(left,i-1);rights=genTreeNodes(i+1,right);// Enumerate all combinations of left and right subtrees
for(intl=0;l<lefts.size();l++){for(intr=0;r<rights.size();r++){TreeNode*node=newTreeNode(i);node->left=lefts[l];node->right=rights[r];nodes.push_back(node);}}}returnnodes;}vector<TreeNode*>generateTrees(intn){vector<TreeNode*>nodes;nodes.clear();nodes=genTreeNodes(1,n);returnnodes;}};