Skip to content

Commit 6076706

Browse files
committedNov 12, 2022
feat: update solutions to lc problem: No.0022,0105,0107
* No.0022.Generate Parentheses * No.0105.Construct Binary Tree from Preorder and Inorder Traversal * No.0107.Binary Tree Level Order Traversal II
1 parent d472a86 commit 6076706

File tree

15 files changed

+209
-53
lines changed

15 files changed

+209
-53
lines changed
 

‎solution/0000-0099/0022.Generate Parentheses/README.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,7 @@ class Solution {
108108
public:
109109
vector<string> generateParenthesis(int n) {
110110
vector<string> ans;
111-
function<void(int, int, string)> dfs;
112-
dfs = [&](int l, int r, string t) {
111+
function<void(int, int, string)> dfs = [&](int l, int r, string t) {
113112
if (l > n || r > n || l < r) return;
114113
if (l == n && r == n) {
115114
ans.push_back(t);
@@ -127,8 +126,7 @@ public:
127126
### **Go**
128127
129128
```go
130-
func generateParenthesis(n int) []string {
131-
ans := []string{}
129+
func generateParenthesis(n int) (ans []string) {
132130
var dfs func(int, int, string)
133131
dfs = func(l, r int, t string) {
134132
if l > n || r > n || l < r {

‎solution/0000-0099/0022.Generate Parentheses/README_EN.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ class Solution {
8080
public:
8181
vector<string> generateParenthesis(int n) {
8282
vector<string> ans;
83-
function<void(int, int, string)> dfs;
84-
dfs = [&](int l, int r, string t) {
83+
function<void(int, int, string)> dfs = [&](int l, int r, string t) {
8584
if (l > n || r > n || l < r) return;
8685
if (l == n && r == n) {
8786
ans.push_back(t);
@@ -99,8 +98,7 @@ public:
9998
### **Go**
10099
101100
```go
102-
func generateParenthesis(n int) []string {
103-
ans := []string{}
101+
func generateParenthesis(n int) (ans []string) {
104102
var dfs func(int, int, string)
105103
dfs = func(l, r int, t string) {
106104
if l > n || r > n || l < r {

‎solution/0000-0099/0022.Generate Parentheses/Solution.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ class Solution {
22
public:
33
vector<string> generateParenthesis(int n) {
44
vector<string> ans;
5-
function<void(int, int, string)> dfs;
6-
dfs = [&](int l, int r, string t) {
5+
function<void(int, int, string)> dfs = [&](int l, int r, string t) {
76
if (l > n || r > n || l < r) return;
87
if (l == n && r == n) {
98
ans.push_back(t);

‎solution/0000-0099/0022.Generate Parentheses/Solution.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
func generateParenthesis(n int) []string {
2-
ans := []string{}
1+
func generateParenthesis(n int) (ans []string) {
32
var dfs func(int, int, string)
43
dfs = func(l, r int, t string) {
54
if l > n || r > n || l < r {

‎solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README.md

+60-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
# self.left = left
6969
# self.right = right
7070
class Solution:
71-
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
71+
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
7272
if not preorder:
7373
return None
7474
v = preorder[0]
@@ -79,6 +79,29 @@ class Solution:
7979
return root
8080
```
8181

82+
```python
83+
# Definition for a binary tree node.
84+
# class TreeNode:
85+
# def __init__(self, val=0, left=None, right=None):
86+
# self.val = val
87+
# self.left = left
88+
# self.right = right
89+
class Solution:
90+
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
91+
def dfs(i, j, n):
92+
if n <= 0:
93+
return None
94+
v = preorder[i]
95+
k = d[v]
96+
root = TreeNode(v)
97+
root.left = dfs(i + 1, j, k - j)
98+
root.right = dfs(i + 1 + k - j, k + 1, n - k + j - 1)
99+
return root
100+
101+
d = {v: i for i, v in enumerate(inorder)}
102+
return dfs(0, 0, len(preorder))
103+
```
104+
82105
### **Java**
83106

84107
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -265,6 +288,42 @@ impl Solution {
265288
}
266289
```
267290

291+
### **JavaScript**
292+
293+
```js
294+
/**
295+
* Definition for a binary tree node.
296+
* function TreeNode(val, left, right) {
297+
* this.val = (val===undefined ? 0 : val)
298+
* this.left = (left===undefined ? null : left)
299+
* this.right = (right===undefined ? null : right)
300+
* }
301+
*/
302+
/**
303+
* @param {number[]} preorder
304+
* @param {number[]} inorder
305+
* @return {TreeNode}
306+
*/
307+
var buildTree = function (preorder, inorder) {
308+
function dfs(i, j, n) {
309+
if (n <= 0) {
310+
return null;
311+
}
312+
const v = preorder[i];
313+
const k = d[v];
314+
const root = new TreeNode(v);
315+
root.left = dfs(i + 1, j, k - j);
316+
root.right = dfs(i + 1 + k - j, k + 1, n - k + j - 1);
317+
return root;
318+
}
319+
const d = new Map();
320+
for (const [i, v] of inorder.entries()) {
321+
d[v] = i;
322+
}
323+
return dfs(0, 0, inorder.length);
324+
};
325+
```
326+
268327
### **...**
269328

270329
```

‎solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README_EN.md

+60-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
# self.left = left
4949
# self.right = right
5050
class Solution:
51-
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
51+
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
5252
if not preorder:
5353
return None
5454
v = preorder[0]
@@ -59,6 +59,29 @@ class Solution:
5959
return root
6060
```
6161

62+
```python
63+
# Definition for a binary tree node.
64+
# class TreeNode:
65+
# def __init__(self, val=0, left=None, right=None):
66+
# self.val = val
67+
# self.left = left
68+
# self.right = right
69+
class Solution:
70+
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
71+
def dfs(i, j, n):
72+
if n <= 0:
73+
return None
74+
v = preorder[i]
75+
k = d[v]
76+
root = TreeNode(v)
77+
root.left = dfs(i + 1, j, k - j)
78+
root.right = dfs(i + 1 + k - j, k + 1, n - k + j - 1)
79+
return root
80+
81+
d = {v: i for i, v in enumerate(inorder)}
82+
return dfs(0, 0, len(preorder))
83+
```
84+
6285
### **Java**
6386

6487
```java
@@ -243,6 +266,42 @@ impl Solution {
243266
}
244267
```
245268

269+
### **JavaScript**
270+
271+
```js
272+
/**
273+
* Definition for a binary tree node.
274+
* function TreeNode(val, left, right) {
275+
* this.val = (val===undefined ? 0 : val)
276+
* this.left = (left===undefined ? null : left)
277+
* this.right = (right===undefined ? null : right)
278+
* }
279+
*/
280+
/**
281+
* @param {number[]} preorder
282+
* @param {number[]} inorder
283+
* @return {TreeNode}
284+
*/
285+
var buildTree = function (preorder, inorder) {
286+
function dfs(i, j, n) {
287+
if (n <= 0) {
288+
return null;
289+
}
290+
const v = preorder[i];
291+
const k = d[v];
292+
const root = new TreeNode(v);
293+
root.left = dfs(i + 1, j, k - j);
294+
root.right = dfs(i + 1 + k - j, k + 1, n - k + j - 1);
295+
return root;
296+
}
297+
const d = new Map();
298+
for (const [i, v] of inorder.entries()) {
299+
d[v] = i;
300+
}
301+
return dfs(0, 0, inorder.length);
302+
};
303+
```
304+
246305
### **...**
247306

248307
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {number[]} preorder
11+
* @param {number[]} inorder
12+
* @return {TreeNode}
13+
*/
14+
var buildTree = function (preorder, inorder) {
15+
function dfs(i, j, n) {
16+
if (n <= 0) {
17+
return null;
18+
}
19+
const v = preorder[i];
20+
const k = d[v];
21+
const root = new TreeNode(v);
22+
root.left = dfs(i + 1, j, k - j);
23+
root.right = dfs(i + 1 + k - j, k + 1, n - k + j - 1);
24+
return root;
25+
}
26+
const d = new Map();
27+
for (const [i, v] of inorder.entries()) {
28+
d[v] = i;
29+
}
30+
return dfs(0, 0, inorder.length);
31+
};

‎solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution.py

+13-9
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
# self.left = left
66
# self.right = right
77
class Solution:
8-
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
9-
if not preorder:
10-
return None
11-
v = preorder[0]
12-
root = TreeNode(val=v)
13-
i = inorder.index(v)
14-
root.left = self.buildTree(preorder[1 : 1 + i], inorder[:i])
15-
root.right = self.buildTree(preorder[1 + i :], inorder[i + 1 :])
16-
return root
8+
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
9+
def dfs(i, j, n):
10+
if n <= 0:
11+
return None
12+
v = preorder[i]
13+
k = d[v]
14+
root = TreeNode(v)
15+
root.left = dfs(i + 1, j, k - j)
16+
root.right = dfs(i + 1 + k - j, k + 1, n - k + j - 1)
17+
return root
18+
19+
d = {v: i for i, v in enumerate(inorder)}
20+
return dfs(0, 0, len(preorder))

‎solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@
4242

4343
<!-- 这里可写通用的实现逻辑 -->
4444

45-
思路同 [105](/solution/0100-0199/0105.Construct%20Binary%20Tree%20from%20Preorder%20and%20Inorder%20Traversal/README.md)
45+
**方法一:递归**
46+
47+
思路同 [105. 从前序与中序遍历序列构造二叉树](/solution/0100-0199/0105.Construct%20Binary%20Tree%20from%20Preorder%20and%20Inorder%20Traversal/README.md)
48+
49+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是二叉树的节点个数。
4650

4751
<!-- tabs:start -->
4852

‎solution/0100-0199/0107.Binary Tree Level Order Traversal II/README.md

+7-8
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,14 @@
6060
# self.left = left
6161
# self.right = right
6262
class Solution:
63-
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
63+
def levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:
6464
ans = []
6565
if root is None:
6666
return ans
6767
q = deque([root])
6868
while q:
69-
n = len(q)
7069
t = []
71-
for _ in range(n):
70+
for _ in range(len(q)):
7271
node = q.popleft()
7372
t.append(node.val)
7473
if node.left:
@@ -145,17 +144,17 @@ public:
145144
vector<vector<int>> levelOrderBottom(TreeNode* root) {
146145
vector<vector<int>> ans;
147146
if (!root) return ans;
148-
queue<TreeNode*> q {{root}};
147+
queue<TreeNode*> q{{root}};
149148
while (!q.empty()) {
150149
vector<int> t;
151-
for (int i = q.size(); i > 0; --i) {
152-
TreeNode* node = q.front();
150+
for (int i = q.size(); i; --i) {
151+
auto node = q.front();
153152
q.pop();
154-
t.push_back(node->val);
153+
t.emplace_back(node->val);
155154
if (node->left) q.push(node->left);
156155
if (node->right) q.push(node->right);
157156
}
158-
ans.push_back(t);
157+
ans.emplace_back(t);
159158
}
160159
reverse(ans.begin(), ans.end());
161160
return ans;

‎solution/0100-0199/0107.Binary Tree Level Order Traversal II/README_EN.md

+7-8
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,14 @@
5050
# self.left = left
5151
# self.right = right
5252
class Solution:
53-
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
53+
def levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:
5454
ans = []
5555
if root is None:
5656
return ans
5757
q = deque([root])
5858
while q:
59-
n = len(q)
6059
t = []
61-
for _ in range(n):
60+
for _ in range(len(q)):
6261
node = q.popleft()
6362
t.append(node.val)
6463
if node.left:
@@ -133,17 +132,17 @@ public:
133132
vector<vector<int>> levelOrderBottom(TreeNode* root) {
134133
vector<vector<int>> ans;
135134
if (!root) return ans;
136-
queue<TreeNode*> q {{root}};
135+
queue<TreeNode*> q{{root}};
137136
while (!q.empty()) {
138137
vector<int> t;
139-
for (int i = q.size(); i > 0; --i) {
140-
TreeNode* node = q.front();
138+
for (int i = q.size(); i; --i) {
139+
auto node = q.front();
141140
q.pop();
142-
t.push_back(node->val);
141+
t.emplace_back(node->val);
143142
if (node->left) q.push(node->left);
144143
if (node->right) q.push(node->right);
145144
}
146-
ans.push_back(t);
145+
ans.emplace_back(t);
147146
}
148147
reverse(ans.begin(), ans.end());
149148
return ans;

‎solution/0100-0199/0107.Binary Tree Level Order Traversal II/Solution.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ class Solution {
1717
queue<TreeNode*> q{{root}};
1818
while (!q.empty()) {
1919
vector<int> t;
20-
for (int i = q.size(); i > 0; --i) {
21-
TreeNode* node = q.front();
20+
for (int i = q.size(); i; --i) {
21+
auto node = q.front();
2222
q.pop();
23-
t.push_back(node->val);
23+
t.emplace_back(node->val);
2424
if (node->left) q.push(node->left);
2525
if (node->right) q.push(node->right);
2626
}
27-
ans.push_back(t);
27+
ans.emplace_back(t);
2828
}
2929
reverse(ans.begin(), ans.end());
3030
return ans;

0 commit comments

Comments
 (0)