思路:
分治。
实现:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode 4 * { 5 * int val; 6 * TreeNode *left; 7 * TreeNode *right; 8 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 9 * }; 10 */ 11 class Solution 12 { 13 public: 14 vector<TreeNode *> dfs(int l, int r) 15 { 16 vector<TreeNode *> ret; 17 if (l > r) 18 { 19 ret.push_back(NULL); 20 return ret; 21 } 22 if (l == r) 23 { 24 ret.push_back(new TreeNode(l)); 25 return ret; 26 } 27 for (int i = l; i <= r; i++) 28 { 29 vector<TreeNode *> lc = dfs(l, i - 1); 30 vector<TreeNode *> rc = dfs(i + 1, r); 31 for (auto j : lc) 32 { 33 for (auto k : rc) 34 { 35 TreeNode * tmp = new TreeNode(i); 36 tmp->left = j; tmp->right = k; 37 ret.push_back(tmp); 38 } 39 } 40 } 41 return ret; 42 } 43 vector<TreeNode *> generateTrees(int n) 44 { 45 if (!n) return vector<TreeNode *>(); 46 return dfs(1, n); 47 } 48 };