Unique Binary Search Trees II
递归。虽然有很多重叠的子问题,但是用DP的话很难表示。。所以用递归也ok,数据集也能过
vector<TreeNode *> generateTrees(int n) { return construct(1,n); } vector<TreeNode *> construct(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*> leftTrees = construct(start,i-1); vector<TreeNode*> rightTrees = construct(i+1,end); for(int j=0;j<leftTrees.size();j++) { for(int k=0;k<rightTrees.size();k++) { TreeNode* root = new TreeNode(i); root->left = leftTrees[j]; root->right = rightTrees[k]; res.push_back(root); } } } return res; }