LeetCode 95. Unique Binary Search Trees II

题目

DFS,

class Solution {
public:
    int vis[100005];
    int m;
    vector<TreeNode*> generateTrees(int n) {
        vector<TreeNode*> ans;
        if(n==0)
            return ans;
        return fun(1,n);
    }

    vector<TreeNode*> fun(int l,int r)
    {
        vector<TreeNode*> result;
        for(int i=l;i<=r;i++)
        {
            vector<TreeNode*> lefts = fun(l,i-1);
            vector<TreeNode*> rights = fun(i+1,r);

            for(int j=0;j<lefts.size();j++)
            {
                for(int k=0;k<rights.size();k++)
                {
                    TreeNode* tree = new TreeNode(i);
                    tree->left = lefts[j];
                    tree->right = rights[k];

                    result.push_back(tree);
                }
            }
        }
        if(result.size()==0)
        {
            result.push_back(NULL);
        }

        return result;

    }
};
原文地址:https://www.cnblogs.com/dacc123/p/12161089.html