本文共 2051 字,大约阅读时间需要 6 分钟。
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public: vectorGenerateTrees(int lower, int higher) { vector res; if(lower > higher) { res.push_back(NULL); return res; } for (int i = lower; i <= higher; ++i) { vector leftTree = GenerateTrees(lower, i-1); vector rightTree = GenerateTrees(i+1, higher); for (int l = 0; l < leftTree.size(); ++l) { for (int r = 0; r < rightTree.size(); ++r) { TreeNode* root = new TreeNode(i); root->left = leftTree[l]; root->right = rightTree[r]; res.push_back(root); } } } return res; } vector generateTrees(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function return GenerateTrees(1, n); }};
second time
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vectorgenerateUtil(int start, int end) { vector ans; if(start > end) { ans.push_back(NULL); return ans; } for(int i = start; i <= end; ++i) { vector leftTrees = generateUtil(start, i-1); vector rightTrees = generateUtil(i+1, end); for(int l = 0; l < leftTrees.size(); ++l) { for(int r = 0; r < rightTrees.size(); ++r) { TreeNode* root = new TreeNode(i); root->left = leftTrees[l]; root->right = rightTrees[r]; ans.push_back(root); } } } return ans; } vector generateTrees(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function return generateUtil(1, n); }};
转载地址:http://jhxti.baihongyu.com/