首页 > 其他 > 详细

[动态规划] leetcode 95 Unique Binary Search Trees II

时间:2019-08-09 22:31:52      阅读:116      评论:0      收藏:0      [点我收藏+]

problem:https://leetcode.com/problems/unique-binary-search-trees-ii/

         用递归传最小值和最大值写起来代码应该会更简练,此处用的是递推写的。

class Solution {
public:
    TreeNode* clone(TreeNode* p, int val)
    {
        if(!p) return nullptr;
        TreeNode* node = new TreeNode(p->val + val);
        node->left = clone(p->left, val);
        node->right = clone(p->right, val);
        return node;
    }
    vector<TreeNode*> generateTrees(int n) {
        vector<vector<TreeNode*>> dp(n + 1);
        for(int k = 1; k <= n; k++)
        {
            for(int c = 1; c <= k; c++)
            {
                int l = c - 1;
                int r = k - c;
                vector<TreeNode*>& left = dp[l];
                vector<TreeNode*>& right = dp[r];
                if(left.size() == 0 && right.size() == 0)
                {
                    TreeNode* p = new TreeNode(c);
                    dp[k].push_back(p);                    
                }
                else if(left.size() == 0)
                {
                    for(int i = 0;i < right.size();i++)
                    {
                        TreeNode* p = new TreeNode(c);
                        p->right = clone(right[i], c);
                        dp[k].push_back(p);
                    }
                }
                else if(right.size() == 0)
                {
                    for(int i = 0;i < left.size();i++)
                    {
                        TreeNode* p = new TreeNode(c);
                        p->left = left[i];
                        dp[k].push_back(p);
                    }
                }
                else
                {
                    for(int i = 0;i < left.size(); i++)
                    {
                        for(int j = 0;j < right.size(); j++)
                        {
                            TreeNode* p = new TreeNode(c);
                            p->left = left[i];
                            p->right = clone(right[j], c);
                            dp[k].push_back(p);                           
                        }
                    }
                }
            }
        }
        return dp[n];
    }
};

 

[动态规划] leetcode 95 Unique Binary Search Trees II

原文:https://www.cnblogs.com/fish1996/p/11329774.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!