@@ -99,7 +99,7 @@ class Solution:
99
99
100
100
while quene:
101
101
in_list = []
102
- for i in range (len (quene)):
102
+ for _ in range (len (quene)):
103
103
node = quene.pop(0 )
104
104
in_list.append(node.val)
105
105
if node.left:
@@ -185,6 +185,43 @@ public:
185
185
}
186
186
};
187
187
```
188
+ python代码:
189
+
190
+ ``` python
191
+ # Definition for a binary tree node.
192
+ # class TreeNode:
193
+ # def __init__(self, val=0, left=None, right=None):
194
+ # self.val = val
195
+ # self.left = left
196
+ # self.right = right
197
+ class Solution :
198
+ def levelOrderBottom (self , root : TreeNode) -> List[List[int ]]:
199
+ if not root:
200
+ return []
201
+ quene = [root]
202
+ out_list = []
203
+
204
+ while quene:
205
+ in_list = []
206
+ for _ in range (len (quene)):
207
+ node = quene.pop(0 )
208
+ in_list.append(node.val)
209
+ if node.left:
210
+ quene.append(node.left)
211
+ if node.right:
212
+ quene.append(node.right)
213
+
214
+ out_list.append(in_list)
215
+
216
+ out_list.reverse()
217
+ return out_list
218
+
219
+ # 执行用时:36 ms, 在所有 Python3 提交中击败了92.00%的用户
220
+ # 内存消耗:15.2 MB, 在所有 Python3 提交中击败了63.76%的用户
221
+ ```
222
+
223
+
224
+
188
225
javascript代码
189
226
190
227
``` javascript
@@ -246,6 +283,50 @@ public:
246
283
}
247
284
};
248
285
```
286
+ python代码:
287
+
288
+ ```python
289
+ # Definition for a binary tree node.
290
+ # class TreeNode:
291
+ # def __init__(self, val=0, left=None, right=None):
292
+ # self.val = val
293
+ # self.left = left
294
+ # self.right = right
295
+ class Solution:
296
+ def rightSideView(self, root: TreeNode) -> List[int]:
297
+ if not root:
298
+ return []
299
+
300
+ # deque来自collections模块,不在力扣平台时,需要手动写入
301
+ # 'from collections import deque' 导入
302
+ # deque相比list的好处是,list的pop(0)是O(n)复杂度,deque的popleft()是O(1)复杂度
303
+
304
+ quene = deque([root])
305
+ out_list = []
306
+
307
+ while quene:
308
+ # 每次都取最后一个node就可以了
309
+ node = quene[-1]
310
+ out_list.append(node.val)
311
+
312
+ # 执行这个遍历的目的是获取下一层所有的node
313
+ for _ in range(len(quene)):
314
+ node = quene.popleft()
315
+ if node.left:
316
+ quene.append(node.left)
317
+ if node.right:
318
+ quene.append(node.right)
319
+
320
+ return out_list
321
+
322
+ # 执行用时:36 ms, 在所有 Python3 提交中击败了89.47%的用户
323
+ # 内存消耗:14.6 MB, 在所有 Python3 提交中击败了96.65%的用户
324
+ ```
325
+
326
+
327
+
328
+
329
+
249
330
javascript代码:
250
331
251
332
``` javascript
@@ -309,6 +390,46 @@ public:
309
390
310
391
```
311
392
393
+ python代码:
394
+
395
+ ```python
396
+ # Definition for a binary tree node.
397
+ # class TreeNode:
398
+ # def __init__(self, val=0, left=None, right=None):
399
+ # self.val = val
400
+ # self.left = left
401
+ # self.right = right
402
+ class Solution:
403
+ def averageOfLevels(self, root: TreeNode) -> List[float]:
404
+ if not root:
405
+ return []
406
+
407
+ quene = deque([root])
408
+ out_list = []
409
+
410
+ while quene:
411
+ in_list = []
412
+
413
+ for _ in range(len(quene)):
414
+ node = quene.popleft()
415
+ in_list.append(node.val)
416
+ if node.left:
417
+ quene.append(node.left)
418
+ if node.right:
419
+ quene.append(node.right)
420
+
421
+ out_list.append(in_list)
422
+
423
+ out_list = map(lambda x: sum(x) / len(x), out_list)
424
+
425
+ return out_list
426
+
427
+ # 执行用时:56 ms, 在所有 Python3 提交中击败了81.48%的用户
428
+ # 内存消耗:17 MB, 在所有 Python3 提交中击败了89.68%的用户
429
+ ```
430
+
431
+
432
+
312
433
javascript代码:
313
434
314
435
``` javascript
@@ -385,7 +506,68 @@ public:
385
506
};
386
507
```
387
508
509
+ python代码:
510
+
511
+ ``` python
512
+ """
513
+ # Definition for a Node.
514
+ class Node:
515
+ def __init__(self, val=None, children=None):
516
+ self.val = val
517
+ self.children = children
518
+ """
519
+
520
+ class Solution :
521
+ def levelOrder (self , root : ' Node' ) -> List[List[int ]]:
522
+ if not root:
523
+ return []
524
+
525
+ quene = deque([root])
526
+ out_list = []
527
+
528
+ while quene:
529
+ in_list = []
530
+
531
+ for _ in range (len (quene)):
532
+ node = quene.popleft()
533
+ in_list.append(node.val)
534
+ if node.children:
535
+ # 这个地方要用extend而不是append,我们看下面的例子:
536
+ # In [18]: alist=[]
537
+ # In [19]: alist.append([1,2,3])
538
+ # In [20]: alist
539
+ # Out[20]: [[1, 2, 3]]
540
+ # In [21]: alist.extend([4,5,6])
541
+ # In [22]: alist
542
+ # Out[22]: [[1, 2, 3], 4, 5, 6]
543
+ # 可以看到extend对要添加的list进行了一个解包操作
544
+ # print(root.children),可以得到children是一个包含
545
+ # 孩子节点地址的list,我们使用for遍历quene的时候,
546
+ # 希望quene是一个单层list,所以要用extend
547
+ # 使用extend的情况,如果print(quene),结果是
548
+ # deque([<__main__.Node object at 0x7f60763ae0a0>])
549
+ # deque([<__main__.Node object at 0x7f607636e6d0>, <__main__.Node object at 0x7f607636e130>, <__main__.Node object at 0x7f607636e310>])
550
+ # deque([<__main__.Node object at 0x7f607636e880>, <__main__.Node object at 0x7f607636ef10>])
551
+ # 可以看到是单层list
552
+ # 如果使用append,print(quene)的结果是
553
+ # deque([<__main__.Node object at 0x7f18907530a0>])
554
+ # deque([[<__main__.Node object at 0x7f18907136d0>, <__main__.Node object at 0x7f1890713130>, <__main__.Node object at 0x7f1890713310>]])
555
+ # 可以看到是两层list,这样for的遍历就会报错
556
+
557
+ quene.extend(node.children)
558
+
559
+ out_list.append(in_list)
560
+
561
+ return out_list
562
+
563
+ # 执行用时:60 ms, 在所有 Python3 提交中击败了76.99%的用户
564
+ # 内存消耗:16.5 MB, 在所有 Python3 提交中击败了89.19%的用户
565
+ ```
566
+
567
+
568
+
388
569
JavaScript代码:
570
+
389
571
``` JavaScript
390
572
var levelOrder = function (root ) {
391
573
// 每一层可能有2个以上,所以不再使用node.left node.right
0 commit comments