Skip to content

Commit f86e2df

Browse files
committed
feat: update solutions to lc problems: No.0107,0226
* No.0107.Binary Tree Level Order Traversal II * No.0226.Invert Binary Tree
1 parent 8daf86b commit f86e2df

File tree

46 files changed

+2592
-308
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+2592
-308
lines changed

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

+124-51
Original file line numberDiff line numberDiff line change
@@ -44,29 +44,28 @@
4444
```python
4545
# Definition for a binary tree node.
4646
# class TreeNode:
47-
# def __init__(self, x):
48-
# self.val = x
49-
# self.left = None
50-
# self.right = None
51-
47+
# def __init__(self, val=0, left=None, right=None):
48+
# self.val = val
49+
# self.left = left
50+
# self.right = right
5251
class Solution:
5352
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
53+
ans = []
5454
if root is None:
55-
return []
56-
q = [root]
57-
res = []
55+
return ans
56+
q = deque([root])
5857
while q:
59-
size = len(q)
58+
n = len(q)
6059
t = []
61-
for _ in range(size):
62-
node = q.pop(0)
60+
for _ in range(n):
61+
node = q.popleft()
6362
t.append(node.val)
64-
if node.left is not None:
63+
if node.left:
6564
q.append(node.left)
66-
if node.right is not None:
65+
if node.right:
6766
q.append(node.right)
68-
res.append(t)
69-
return res[::-1]
67+
ans.append(t)
68+
return ans[::-1]
7069
```
7170

7271
### **Java**
@@ -80,28 +79,114 @@ class Solution:
8079
* int val;
8180
* TreeNode left;
8281
* TreeNode right;
83-
* TreeNode(int x) { val = x; }
82+
* TreeNode() {}
83+
* TreeNode(int val) { this.val = val; }
84+
* TreeNode(int val, TreeNode left, TreeNode right) {
85+
* this.val = val;
86+
* this.left = left;
87+
* this.right = right;
88+
* }
8489
* }
8590
*/
8691
class Solution {
8792
public List<List<Integer>> levelOrderBottom(TreeNode root) {
88-
if (root == null) return Collections.emptyList();
89-
Deque<TreeNode> q = new ArrayDeque<>();
90-
List<List<Integer>> res = new ArrayList<>();
91-
q.offer(root);
93+
LinkedList<List<Integer>> ans = new LinkedList<>();
94+
if (root == null) {
95+
return ans;
96+
}
97+
Deque<TreeNode> q = new LinkedList<>();
98+
q.offerLast(root);
9299
while (!q.isEmpty()) {
93-
int size = q.size();
94100
List<Integer> t = new ArrayList<>();
95-
while (size-- > 0) {
96-
TreeNode node = q.poll();
101+
for (int i = 0, n = q.size(); i < n; ++i) {
102+
TreeNode node = q.pollFirst();
97103
t.add(node.val);
98-
if (node.left != null) q.offer(node.left);
99-
if (node.right != null) q.offer(node.right);
104+
if (node.left != null) {
105+
q.offerLast(node.left);
106+
}
107+
if (node.right != null) {
108+
q.offerLast(node.right);
109+
}
110+
}
111+
ans.addFirst(t);
112+
}
113+
return ans;
114+
}
115+
}
116+
```
117+
118+
### **C++**
119+
120+
```cpp
121+
/**
122+
* Definition for a binary tree node.
123+
* struct TreeNode {
124+
* int val;
125+
* TreeNode *left;
126+
* TreeNode *right;
127+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
128+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
129+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
130+
* };
131+
*/
132+
class Solution {
133+
public:
134+
vector<vector<int>> levelOrderBottom(TreeNode* root) {
135+
vector<vector<int>> ans;
136+
if (!root) return ans;
137+
queue<TreeNode*> q{{root}};
138+
while (!q.empty())
139+
{
140+
vector<int> t;
141+
for (int i = 0, n = q.size(); i < n; ++i)
142+
{
143+
TreeNode* node = q.front();
144+
q.pop();
145+
t.push_back(node->val);
146+
if (node->left) q.push(node->left);
147+
if (node->right) q.push(node->right);
100148
}
101-
res.add(0, t);
149+
ans.push_back(t);
102150
}
103-
return res;
151+
reverse(ans.begin(), ans.end());
152+
return ans;
104153
}
154+
};
155+
```
156+
157+
### **Go**
158+
159+
```go
160+
/**
161+
* Definition for a binary tree node.
162+
* type TreeNode struct {
163+
* Val int
164+
* Left *TreeNode
165+
* Right *TreeNode
166+
* }
167+
*/
168+
func levelOrderBottom(root *TreeNode) [][]int {
169+
ans := [][]int{}
170+
if root == nil {
171+
return ans
172+
}
173+
q := []*TreeNode{root}
174+
for len(q) > 0 {
175+
var t []int
176+
for i, n := 0, len(q); i < n; i++ {
177+
node := q[0]
178+
q = q[1:]
179+
t = append(t, node.Val)
180+
if node.Left != nil {
181+
q = append(q, node.Left)
182+
}
183+
if node.Right != nil {
184+
q = append(q, node.Right)
185+
}
186+
}
187+
ans = append([][]int{t}, ans...)
188+
}
189+
return ans
105190
}
106191
```
107192

@@ -121,33 +206,21 @@ class Solution {
121206
* @return {number[][]}
122207
*/
123208
var levelOrderBottom = function (root) {
124-
if (!root) {
125-
return [];
126-
}
127-
let q = [],
128-
output = [],
129-
levelOutput = [];
130-
q.push(root);
131-
q.push(null);
209+
let ans = [];
210+
if (!root) return ans;
211+
let q = [root];
132212
while (q.length) {
133-
let cur = q.shift();
134-
levelOutput.push(cur.val);
135-
if (cur.left) {
136-
q.push(cur.left);
137-
}
138-
if (cur.right) {
139-
q.push(cur.right);
140-
}
141-
if (!q[0]) {
142-
q.shift();
143-
output.unshift(levelOutput);
144-
levelOutput = [];
145-
if (q.length) {
146-
q.push(null);
147-
}
213+
let n = q.length;
214+
let t = [];
215+
while (n-- > 0) {
216+
const node = q.shift();
217+
t.push(node.val);
218+
if (node.left) q.push(node.left);
219+
if (node.right) q.push(node.right);
148220
}
221+
ans.unshift(t);
149222
}
150-
return output;
223+
return ans;
151224
};
152225
```
153226

0 commit comments

Comments
 (0)