Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5f60d00

Browse files
committed
feat: add solutions to lc/lcof2 problems
lc No.0515 & lcof2 No.044. Find Largest Value in Each Tree Row
1 parent 3183c0d commit 5f60d00

File tree

11 files changed

+341
-199
lines changed

11 files changed

+341
-199
lines changed

‎lcof2/剑指 Offer II 044. 二叉树每层的最大值/README.md‎

Lines changed: 76 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ class Solution:
9494
def largestValues(self, root: TreeNode) -> List[int]:
9595
if root is None:
9696
return []
97-
q = collections.deque([root])
98-
res = []
97+
q = deque([root])
98+
ans = []
9999
while q:
100100
n = len(q)
101101
t = float('-inf')
@@ -106,8 +106,8 @@ class Solution:
106106
q.append(node.left)
107107
if node.right:
108108
q.append(node.right)
109-
res.append(t)
110-
return res
109+
ans.append(t)
110+
return ans
111111
```
112112

113113
### **Java**
@@ -137,7 +137,7 @@ class Solution {
137137
}
138138
Deque<TreeNode> q = new ArrayDeque<>();
139139
q.offer(root);
140-
List<Integer> res = new ArrayList<>();
140+
List<Integer> ans = new ArrayList<>();
141141
while (!q.isEmpty()) {
142142
int t = Integer.MIN_VALUE;
143143
for (int i = 0, n = q.size(); i < n; ++i) {
@@ -150,59 +150,96 @@ class Solution {
150150
q.offer(node.right);
151151
}
152152
}
153-
res.add(t);
153+
ans.add(t);
154154
}
155-
return res;
155+
return ans;
156156
}
157157
}
158158
```
159159

160160
### **C++**
161161

162162
```cpp
163+
/**
164+
* Definition for a binary tree node.
165+
* struct TreeNode {
166+
* int val;
167+
* TreeNode *left;
168+
* TreeNode *right;
169+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
170+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
171+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
172+
* };
173+
*/
163174
class Solution {
164175
public:
165176
vector<int> largestValues(TreeNode* root) {
166-
vector<int> res;
167-
if (!root)
168-
{
169-
return res;
170-
}
171-
172-
deque<TreeNode *> deq;
173-
deq.push_back(root);
174-
while (!deq.empty())
177+
if (!root) return {};
178+
queue<TreeNode*> q;
179+
vector<int> ans;
180+
q.push(root);
181+
while (!q.empty())
175182
{
176-
int size = deq.size();
177-
int maxnum = INT_MIN;
178-
for (int i = 0; i < size; i++)
183+
int t = INT_MIN;
184+
for (int i = 0, n = q.size(); i < n; ++i)
179185
{
180-
TreeNode *ptr = deq.front();
181-
deq.pop_front();
182-
if (maxnum < ptr->val)
183-
{
184-
maxnum = ptr->val;
185-
}
186-
187-
if (ptr->left)
188-
{
189-
deq.push_back(ptr->left);
190-
}
191-
192-
if (ptr->right)
193-
{
194-
deq.push_back(ptr->right);
195-
}
186+
auto node = q.front();
187+
q.pop();
188+
t = max(t, node->val);
189+
if (node->left) q.push(node->left);
190+
if (node->right) q.push(node->right);
196191
}
197-
198-
res.push_back(maxnum);
192+
ans.push_back(t);
199193
}
200-
201-
return res;
194+
return ans;
202195
}
203196
};
204197
```
205198
199+
### **Go**
200+
201+
```go
202+
/**
203+
* Definition for a binary tree node.
204+
* type TreeNode struct {
205+
* Val int
206+
* Left *TreeNode
207+
* Right *TreeNode
208+
* }
209+
*/
210+
func largestValues(root *TreeNode) []int {
211+
var ans []int
212+
if root == nil {
213+
return ans
214+
}
215+
var q = []*TreeNode{root}
216+
for len(q) > 0 {
217+
n := len(q)
218+
t := math.MinInt32
219+
for i := 0; i < n; i++ {
220+
node := q[0]
221+
q = q[1:]
222+
t = max(t, node.Val)
223+
if node.Left != nil {
224+
q = append(q, node.Left)
225+
}
226+
if node.Right != nil {
227+
q = append(q, node.Right)
228+
}
229+
}
230+
ans = append(ans, t)
231+
}
232+
return ans
233+
}
234+
235+
func max(a, b int) int {
236+
if a > b {
237+
return a
238+
}
239+
return b
240+
}
241+
```
242+
206243
### **...**
207244

208245
```
Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,34 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
112
class Solution {
213
public:
3-
vector<int> largestValues(TreeNode *root) {
4-
vector<int> res;
5-
if (!root)
14+
vector<int> largestValues(TreeNode* root) {
15+
if (!root) return {};
16+
queue<TreeNode*> q;
17+
vector<int> ans;
18+
q.push(root);
19+
while (!q.empty())
620
{
7-
return res;
8-
}
9-
10-
deque<TreeNode *> deq;
11-
deq.push_back(root);
12-
while (!deq.empty())
13-
{
14-
int size = deq.size();
15-
int maxnum = INT_MIN;
16-
for (int i = 0; i < size; i++)
21+
int t = INT_MIN;
22+
for (int i = 0, n = q.size(); i < n; ++i)
1723
{
18-
TreeNode *ptr = deq.front();
19-
deq.pop_front();
20-
if (maxnum < ptr->val)
21-
{
22-
maxnum = ptr->val;
23-
}
24-
25-
if (ptr->left)
26-
{
27-
deq.push_back(ptr->left);
28-
}
29-
30-
if (ptr->right)
31-
{
32-
deq.push_back(ptr->right);
33-
}
24+
auto node = q.front();
25+
q.pop();
26+
t = max(t, node->val);
27+
if (node->left) q.push(node->left);
28+
if (node->right) q.push(node->right);
3429
}
35-
36-
res.push_back(maxnum);
30+
ans.push_back(t);
3731
}
38-
39-
return res;
32+
return ans;
4033
}
4134
};
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* type TreeNode struct {
4+
* Val int
5+
* Left *TreeNode
6+
* Right *TreeNode
7+
* }
8+
*/
9+
func largestValues(root *TreeNode) []int {
10+
var ans []int
11+
if root == nil {
12+
return ans
13+
}
14+
var q = []*TreeNode{root}
15+
for len(q) > 0 {
16+
n := len(q)
17+
t := math.MinInt32
18+
for i := 0; i < n; i++ {
19+
node := q[0]
20+
q = q[1:]
21+
t = max(t, node.Val)
22+
if node.Left != nil {
23+
q = append(q, node.Left)
24+
}
25+
if node.Right != nil {
26+
q = append(q, node.Right)
27+
}
28+
}
29+
ans = append(ans, t)
30+
}
31+
return ans
32+
}
33+
34+
func max(a, b int) int {
35+
if a > b {
36+
return a
37+
}
38+
return b
39+
}

‎lcof2/剑指 Offer II 044. 二叉树每层的最大值/Solution.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public List<Integer> largestValues(TreeNode root) {
2020
}
2121
Deque<TreeNode> q = new ArrayDeque<>();
2222
q.offer(root);
23-
List<Integer> res = new ArrayList<>();
23+
List<Integer> ans = new ArrayList<>();
2424
while (!q.isEmpty()) {
2525
int t = Integer.MIN_VALUE;
2626
for (int i = 0, n = q.size(); i < n; ++i) {
@@ -33,8 +33,8 @@ public List<Integer> largestValues(TreeNode root) {
3333
q.offer(node.right);
3434
}
3535
}
36-
res.add(t);
36+
ans.add(t);
3737
}
38-
return res;
38+
return ans;
3939
}
4040
}

‎lcof2/剑指 Offer II 044. 二叉树每层的最大值/Solution.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ class Solution:
88
def largestValues(self, root: TreeNode) -> List[int]:
99
if root is None:
1010
return []
11-
q = collections.deque([root])
12-
res = []
11+
q = deque([root])
12+
ans = []
1313
while q:
1414
n = len(q)
1515
t = float('-inf')
@@ -20,5 +20,5 @@ def largestValues(self, root: TreeNode) -> List[int]:
2020
q.append(node.left)
2121
if node.right:
2222
q.append(node.right)
23-
res.append(t)
24-
return res
23+
ans.append(t)
24+
return ans

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /