【leetcode】Unique Binary Search Trees II

来源:互联网 发布:一淘网和淘宝什么关系 编辑:程序博客网 时间:2024/06/06 22:41

From: https://leetcode.com/problems/unique-binary-search-trees-ii/

Given 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 {public:    vector<TreeNode *> generateTrees(int n) {       return createTree(1,n);    }        vector<TreeNode *> createTree(int start, int end) {        vector<TreeNode *> results;        if(start > end) {results.push_back(NULL);return results;}                for(int k=start; k<=end; k++) {            vector<TreeNode *> left = createTree(start, k-1);            vector<TreeNode *> right = createTree(k+1, end);            for(int i=0; i<left.size(); i++) {                for(int j=0; j<right.size(); j++) {                    TreeNode * root = new TreeNode(k);                    root->left = left[i];                    root->right = right[j];                    results.push_back(root);                }            }        }        return results;    }};


public List<TreeNode> generateTrees(int n) {return construct(1, n);}private List<TreeNode> construct(int start, int end) {List<TreeNode> ans = new ArrayList<TreeNode>();if (start > end) {ans.add(null);return ans;}for (int k = start; k <= end; ++k) {List<TreeNode> left = construct(start, k - 1);List<TreeNode> right = construct(k + 1, end);for (int i = 0; i < left.size(); ++i) {for (int j = 0; j < right.size(); ++j) {TreeNode root = new TreeNode(k);root.left = left.get(i);root.right = right.get(j);ans.add(root);}}}return ans;    }


0 0
原创粉丝点击