LeetCode: Unique Binary Search Trees II
2014-10-06 10:04
323 查看
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.
Round 2:
/**
* 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) {
vector<TreeNode *> result;
dfs(1, n, result);
return result;
}
private:
void dfs(int start, int end, vector<TreeNode*> &cur)
{
if(start > end)
{
cur.push_back(NULL);
return;
}
for(int i = start; i <= end; i++)
{
vector<TreeNode *> left;
dfs(start, i-1, left);
vector<TreeNode *> right;
dfs(i+1, end, right);
for(int x = 0; x < left.size(); x++)
for(int y = 0; y < right.size(); y++)
{
TreeNode *node = new TreeNode(i);
node->left = left[x];
node->right = right[y];
cur.push_back(node);
}
}
}
};
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 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) { if(n == 0) return *buildTree(1, 0); return *buildTree(1, n); } private: vector<TreeNode *>* buildTree(int start, int end) { vector<TreeNode* >* cur = new vector<TreeNode *>(); if(start > end) { (*cur).push_back(NULL); return cur; } for(int i = start; i <= end; i++) { vector<TreeNode* > *left = buildTree(start, i-1); vector<TreeNode* > *right = buildTree(i+1, end); for(int l = 0; l < (*left).size(); l++) { for(int r = 0; r < (*right).size(); r++) { TreeNode *root = new TreeNode(i); root->left = (*left)[l]; root->right = (*right)[r]; (*cur).push_back(root); } } } return cur; } };
Round 2:
/**
* 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) {
vector<TreeNode *> result;
dfs(1, n, result);
return result;
}
private:
void dfs(int start, int end, vector<TreeNode*> &cur)
{
if(start > end)
{
cur.push_back(NULL);
return;
}
for(int i = start; i <= end; i++)
{
vector<TreeNode *> left;
dfs(start, i-1, left);
vector<TreeNode *> right;
dfs(i+1, end, right);
for(int x = 0; x < left.size(); x++)
for(int y = 0; y < right.size(); y++)
{
TreeNode *node = new TreeNode(i);
node->left = left[x];
node->right = right[y];
cur.push_back(node);
}
}
}
};
相关文章推荐
- LeetCode力扣之95. Unique Binary Search Trees II
- LeetCode 95.Unique Binary Search Trees II
- LeetCode(95) Unique Binary Search Trees II
- LeetCode题解:Unique Binary Search Trees II
- leetcode - Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II
- leetcode: 95. Unique Binary Search Trees II [✗]
- [LeetCode] Unique Binary Search Trees II 独一无二的二叉搜索树之二
- [leetcode][tree] Unique Binary Search Trees II
- 【LeetCode】C# 95、Unique Binary Search Trees II
- LeetCode——Unique Binary Search Trees II
- LeetCode-95. Unique Binary Search Trees II
- Leetcode-Unique Binary Search Trees II
- [LeetCode]Unique Binary Search Trees I&II
- leetcode-Unique Binary Search Trees II
- LeetCode解题报告—— Reverse Linked List II & Restore IP Addresses & Unique Binary Search Trees II
- 2 Unique Binary Search Trees II_Leetcode
- leetcode 刷题之路 50 Unique Binary Search Trees II
- Unique Binary Search Trees II -- LeetCode
- Leetcode: Unique Binary Search Trees II