思路跟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]; }};新闻热点
疑难解答