Skip to content

Commit 80e2afd

Browse files
Add files via upload
1 parent 8e4d9cf commit 80e2afd

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// 16ms %
2+
3+
/**
4+
* Definition for a binary tree node.
5+
* struct TreeNode {
6+
* int val;
7+
* TreeNode *left;
8+
* TreeNode *right;
9+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
10+
* };
11+
*/
12+
13+
#include<vector>
14+
using namespace std;
15+
16+
class Solution {
17+
public:
18+
vector<TreeNode*> generateTrees(int n) {
19+
if (n < 1)
20+
{
21+
vector<TreeNode*> temp;
22+
return temp;
23+
}
24+
else
25+
return helper(1, n);
26+
}
27+
28+
vector<TreeNode*> helper(int left, int right)
29+
{
30+
vector<TreeNode*> vec;
31+
if (left > right)
32+
vec.push_back(0);
33+
else if (left == right)
34+
vec.push_back(new TreeNode(left));
35+
else
36+
{
37+
for (int i = left; i <= right; i++)
38+
{
39+
vector<TreeNode*> leftTree = helper(left, i - 1);
40+
vector<TreeNode*> rightTree = helper(i + 1, right);
41+
42+
for (vector<TreeNode*>::iterator leftIter = leftTree.begin(); leftIter != leftTree.end(); leftIter++)
43+
{
44+
for (vector<TreeNode*>::iterator rightIter = rightTree.begin(); rightIter != rightTree.end(); rightIter++)
45+
{
46+
TreeNode* root = new TreeNode(i);
47+
root->left = *leftIter;
48+
root->right = *rightIter;
49+
50+
vec.push_back(root);
51+
}
52+
}
53+
}
54+
}
55+
return vec;
56+
}
57+
};
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# 88ms 46.92%
2+
3+
# Definition for a binary tree node.
4+
# class TreeNode:
5+
# def __init__(self, x):
6+
# self.val = x
7+
# self.left = None
8+
# self.right = None
9+
10+
class Solution:
11+
def generateTrees(self, n):
12+
"""
13+
:type n: int
14+
:rtype: List[TreeNode]
15+
"""
16+
17+
if n < 1:
18+
return []
19+
else:
20+
return self.helper(1, n)
21+
22+
def helper(self, left, right):
23+
trees = []
24+
25+
if left > right:
26+
trees.append(None)
27+
elif left == right:
28+
trees.append(TreeNode(left))
29+
else:
30+
for i in range(left, right + 1):
31+
leftTree = self.helper(left, i - 1)
32+
rightTree = self.helper(i + 1, right)
33+
34+
for leftIter in leftTree:
35+
for rightIter in rightTree:
36+
root = TreeNode(i)
37+
root.left = leftIter
38+
root.right = rightIter
39+
40+
trees.append(root)
41+
return trees

0 commit comments

Comments
 (0)