Skip to content

Commit c591dc1

Browse files
Merge pull request #326 from borninfreedom/master
给其他几道题目添加了python的代码
2 parents b2eb0b8 + 03ff3ad commit c591dc1

File tree

1 file changed

+183
-1
lines changed

1 file changed

+183
-1
lines changed

problems/0102.二叉树的层序遍历.md

Lines changed: 183 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class Solution:
9999

100100
while quene:
101101
in_list = []
102-
for i in range(len(quene)):
102+
for _ in range(len(quene)):
103103
node = quene.pop(0)
104104
in_list.append(node.val)
105105
if node.left:
@@ -185,6 +185,43 @@ public:
185185
}
186186
};
187187
```
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+
188225
javascript代码
189226

190227
```javascript
@@ -246,6 +283,50 @@ public:
246283
}
247284
};
248285
```
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+
249330
javascript代码:
250331

251332
```javascript
@@ -309,6 +390,46 @@ public:
309390

310391
```
311392
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+
312433
javascript代码:
313434

314435
```javascript
@@ -385,7 +506,68 @@ public:
385506
};
386507
```
387508

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+
388569
JavaScript代码:
570+
389571
```JavaScript
390572
var levelOrder = function(root) {
391573
//每一层可能有2个以上,所以不再使用node.left node.right

0 commit comments

Comments
 (0)