Unique Binary Search Trees II

递归。虽然有很多重叠的子问题,但是用DP的话很难表示。。所以用递归也ok,数据集也能过

    vector<TreeNode *> generateTrees(int n)
    {
        return construct(1,n);
    }
    
    vector<TreeNode *> construct(int start,int end)
    {
        vector<TreeNode*> res;
        if(start>end)
        {
            res.push_back(NULL);
            return res;
        }
        
        for(int i=start;i<=end;i++)
        {
            vector<TreeNode*> leftTrees = construct(start,i-1);
            vector<TreeNode*> rightTrees = construct(i+1,end);
            for(int j=0;j<leftTrees.size();j++)
            {
                for(int k=0;k<rightTrees.size();k++)
                {
                    TreeNode* root = new TreeNode(i);
                    root->left = leftTrees[j];
                    root->right = rightTrees[k];
                    res.push_back(root);
                }
            }
        }
        return res;
    }

 

posted @ 2013-10-05 17:03  summer_zhou  阅读(131)  评论(0编辑  收藏  举报