95. Unique Binary Search Trees II

来源:互联网 发布:北京地铁软件 编辑:程序博客网 时间:2024/06/03 17:20

思路跟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];    }};
0 0