思路跟96一样,就是烦了一点,在右边的时候需要加上n,注意一点!!错了很多的
就是要new 新的点!!!别重复使用!!!每次生成都要new,2刷可以刷,应该有其他做法!
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* pushn(TreeNode* root, int n){
if(root == NULL) return NULL;
TreeNode* newr = new TreeNode(root -> val + n);
newr -> left = pushn(root -> left, n);
newr -> right = pushn(root -> right, n);
return newr;
}
vector<TreeNode*> generateTrees(int n) {
vector<vector<TreeNode*>>ve;
vector<TreeNode*>vec;
if(n == 0) return vec;
vec.push_back(NULL);
ve.push_back(vec);
vec.clear();
TreeNode *t1 = new TreeNode(1);
vec.push_back(t1);
ve.push_back(vec);
vec.clear();
for(int i = 2; i <= n; ++ i){
vector<TreeNode*>vec1;
for(int j = 1; j <= i; ++ j){
for(int k = 0; k < ve[j - 1].size(); ++ k){
for(int t = 0; t < ve[i - j].size(); ++ t){
TreeNode *nt = new TreeNode(j);
nt -> left = ve[j - 1][k];
nt -> right = pushn(ve[i - j][t], j);
vec1.push_back(nt);
}
}
}
ve.push_back(vec1);
}
return ve[n];
}
};