lintcode:Unique Binary Search Trees II

来源:互联网 发布:万学海文考研 知乎 编辑:程序博客网 时间:2024/05/19 12:26

Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.

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
Tags


/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val; *         this->left = this->right = NULL; *     } * } */class Solution {    private:    TreeNode* clone(TreeNode *root) {                if (root == NULL)            return NULL;                    TreeNode *head = new TreeNode(root->val);        head->left = clone(root->left);        head->right = clone(root->right);                return head;    }    vector<TreeNode *> generateTreesHelper(int start, int end) {                vector<TreeNode *> retVtr;                if (start > end)        {            retVtr.push_back(NULL);            return retVtr;        }                TreeNode *root = NULL;        for (int i=start; i<=end; i++) {                        root = new TreeNode(i);            vector<TreeNode* > ltree = generateTreesHelper(start, i-1);            vector<TreeNode* > rtree = generateTreesHelper(i+1, end);                        //双重循环来构建左右子树            for (int l=0; l<ltree.size(); l++)            {                for (int r=0; r<rtree.size(); r++)                {                    root->left = ltree[l];                    root->right = rtree[r];                    retVtr.push_back(clone(root));                }            }        }        return retVtr;            }    public:    /**     * @paramn n: An integer     * @return: A list of root     */    vector<TreeNode *> generateTrees(int n) {        // write your code here        return generateTreesHelper(1, n);    }};





0 0
原创粉丝点击