Leetcode 95. Unique Binary Search Trees II (Medium) (cpp)

来源:互联网 发布:国云大数据魔镜 编辑:程序博客网 时间:2024/05/21 14:55

Leetcode 95. Unique Binary Search Trees II (Medium) (cpp)

Tag: Tree, Dynamic Programming

Difficulty: Medium


/*95. Unique Binary Search Trees II (Medium)Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.For example,Given n = 3, your program should return all 5 unique BST's shown below. 1         3     3      2      1  \       /     /      / \      \   3     2     1      1   3      2  /     /       \                 \ 2     1         2                 3*//** * 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 { private:    vector<vector<vector<TreeNode*>>> table;    vector<TreeNode*> generate(int l, int r) {        if (l > r) return {NULL};        if (table[l][r].empty()) {            for (int mid = l; mid <= r; mid++) {                vector<TreeNode*> left = generate(l, mid - 1), right = generate(mid + 1, r);                for (auto a : left) {                    for (auto b : right) {                        TreeNode* cur = new TreeNode(mid);                        cur -> left = a;                        cur -> right = b;                        table[l][r].push_back(cur);                    }                }            }        }        return table[l][r];    }public:    vector<TreeNode*> generateTrees(int n) {        if (n < 1) return {};        table = vector<vector<vector<TreeNode*>>> (n + 1, vector<vector<TreeNode*>>(n + 1, vector<TreeNode*>()));        return generate(1, n);    }};


0 0