LeetCode(95) Unique Binary Search Trees II

来源:互联网 发布:电通安吉斯 知乎 编辑:程序博客网 时间:2024/05/16 19:24

在LeetCode(96) Unique Binary Search Trees思考的基础上进一步思考得出如下代码,动态规划。

/** * 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:    vector<TreeNode*> generate(vector<int> &nums, int index1, int index2) {        vector<TreeNode*> result;        if(index1 == index2) {            TreeNode *p1 = new TreeNode(nums[index1]);            result.push_back(p1);            return result;        }        if(index1 + 1 == index2) {            TreeNode *p1 = new TreeNode(nums[index1]);            TreeNode *p2 = new TreeNode(nums[index2]);            p1->left = NULL;            p1->right = p2;            p2->left = NULL;            p2->right = NULL;            result.push_back(p1);            TreeNode *p3 = new TreeNode(nums[index1]);            TreeNode *p4 = new TreeNode(nums[index2]);            p4->left = p3;            p4->right = NULL;            p3->left = NULL;            p3->right = NULL;            result.push_back(p4);            return result;        }        for(int k = index1; k <= index2; k++) {            if(k == index1) {                vector<TreeNode*> tmp1 = generate(nums, index1 + 1, index2);                for(int i = 0; i < tmp1.size(); i++) {                    TreeNode *p1 = new TreeNode(nums[index1]);                    p1->right = tmp1[i];                    result.push_back(p1);                }                continue;            }            if(k == index2) {                vector<TreeNode*> tmp4 = generate(nums, index1, index2 - 1);                for(int i = 0; i < tmp4.size(); i++) {                    TreeNode *p1 = new TreeNode(nums[index2]);                    p1->left = tmp4[i];                    result.push_back(p1);                }                continue;            }            vector<TreeNode*> tmp2 = generate(nums, index1, k - 1);            vector<TreeNode*> tmp3 = generate(nums, k + 1, index2);            for(int i = 0; i < tmp2.size(); i++) {                for(int j = 0; j < tmp3.size(); j++) {                    TreeNode *p1 = new TreeNode(nums[k]);                    p1->left = tmp2[i];                    p1->right = tmp3[j];                    result.push_back(p1);                }            }        }    }    vector<TreeNode*> generateTrees(int n) {        if(n == 0) {            //TreeNode *p;            vector<TreeNode*> result;            result.push_back(NULL);            return result;        }        vector<int> nums;        for(int i = 0; i <= n; i++)            nums.push_back(i);        return generate(nums, 1, n);    }};

参考水中的鱼

0 0