File tree Expand file tree Collapse file tree 2 files changed +98
-0
lines changed
Unique Binary Search Trees II Expand file tree Collapse file tree 2 files changed +98
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments