1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
class Solution {
public:
vector<TreeNode *> genTreeNodes(int left,int right) {
vector<TreeNode *> nodes;
nodes.clear();
if(left > right) {
nodes.push_back(NULL);
return nodes;
}
if(left == right) {
TreeNode * node = new TreeNode(left);
nodes.push_back(node);
return nodes;
}
for(int i = left;i<= right;i++) {
vector<TreeNode *>lefts,rights;
lefts.clear();
rights.clear();
lefts = genTreeNodes(left,i-1);
rights = genTreeNodes(i+1,right);
// 交替枚举left and right
for(int l = 0;l < lefts.size();l++) {
for(int r = 0; r < rights.size();r++) {
TreeNode *node = new TreeNode(i);
node->left = lefts[l];
node->right = rights[r];
nodes.push_back(node);
}
}
}
return nodes;
}
vector<TreeNode *> generateTrees(int n) {
vector<TreeNode *>nodes;
nodes.clear();
nodes = genTreeNodes(1,n);
return nodes;
}
};
|