Unique Binary Search Trees (& II)

来源:互联网 发布:淘宝店的宣传标语 编辑:程序博客网 时间:2024/04/30 04:58
DP:
class Solution {public:    int numTrees(int n) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if (n==0 || n==1) return 1;        vector<int> num(n+1,0);        num[0]=1;        num[1]=1;        for (int i=2; i<=n; i++) {            for (int j=0; j<i; j++) {                num[i] += num[j] * num[i-1-j];            }        }        return num[n];    }};

II: DFS

class Solution {public:    vector<TreeNode *> dfs(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 *> leftsub=dfs(start, i-1);            vector<TreeNode *> rightsub=dfs(i+1, end);            for (int j=0; j<leftsub.size(); j++) {                for (int k=0; k<rightsub.size(); k++) {                    TreeNode *root = new TreeNode(i);                    root->left= leftsub[j];                    root->right= rightsub[k];                    res.push_back(root);                }            }        }        return res;    }    vector<TreeNode *> generateTrees(int n) {        return dfs(1,n);    }};