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
解法一:
根據數字i將n個數字分成左右兩邊,然後recursive的生成subtree。
/**
* 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) {
if(n==0) return {};
return *generateTrees(1,n);
}
vector<TreeNode*>* generateTrees(int start, int end){
vector<TreeNode*> *subtree = new vector<TreeNode*>();
if(start>end) subtree->push_back(NULL);
for(int i = start; i<=end; i++){
vector<TreeNode*> *subleft = generateTrees(start,i-1);
vector<TreeNode*> *subright = generateTrees(i+1,end);
for(int j=0; j<subleft->size(); j++){
for(int k=0; k<subright->size();k++){
TreeNode* cur = new TreeNode(i);
cur->left = (*subleft)[j];
cur->right = (*subright)[k];
subtree->push_back(cur);
}
}
}
return subtree;
}
};