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
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.
/**
* Definition for binary tree
* 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 getTrees(1, n);
}
vector<TreeNode*> getTrees(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*> left = getTrees(start, i-1);
vector<TreeNode*> right = getTrees(i+1, end);
for (int l = 0; l < left.size(); l++) {
for (int r = 0; r < right.size() ;r++) {
TreeNode* cur = new TreeNode(i);
cur->left = left[l];
cur->right = right[r];
res.push_back(cur);
}
}
}
}
};

本文介绍了一种算法,用于生成所有可能的独特二叉搜索树(BSTs),这些树能存储从1到n的值。通过递归地构造左右子树来确保生成的BST结构各异。示例展示了当n为3时,可以生成五种不同的BST结构。
1453

被折叠的 条评论
为什么被折叠?



