Skip to content

Commit f9eadcf

Browse files
author
iamminji
committed
[20200704] Solve july challenge questions
1 parent e737b6d commit f9eadcf

File tree

2 files changed

+107
-0
lines changed

2 files changed

+107
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
## 문제
2+
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
3+
4+
```
5+
For example:
6+
Given binary tree [3,9,20,null,null,15,7],
7+
3
8+
/ \
9+
9 20
10+
/ \
11+
15 7
12+
return its bottom-up level order traversal as:
13+
[
14+
[15,7],
15+
[9,20],
16+
[3]
17+
]
18+
```
19+
20+
### 솔루션
21+
알고리즘 보다는 구현 문제였다.
22+
23+
#### 해결
24+
tree 순회하면서 리스트에 값을 넣는데, 이 때 depth 를 리스트의 인덱스로 잡고 넣어주면 된다.
25+
리턴할 때는 리스트의 역순으로 리턴하면 정답이 나온다.
26+
27+
```python3
28+
class Solution:
29+
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
30+
31+
if root is None:
32+
return []
33+
34+
queue = deque()
35+
queue.append([root, 0])
36+
37+
result = []
38+
39+
while queue:
40+
node, depth = queue.popleft()
41+
42+
if len(result) <= depth:
43+
result.append([node.val])
44+
else:
45+
result[depth].append(node.val)
46+
47+
if node.left is not None:
48+
queue.append([node.left, depth+1])
49+
50+
if node.right is not None:
51+
queue.append([node.right, depth+1])
52+
53+
return result[::-1]
54+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from typing import List
2+
from collections import deque
3+
4+
5+
# Definition for a binary tree node.
6+
class TreeNode:
7+
def __init__(self, val=0, left=None, right=None):
8+
self.val = val
9+
self.left = left
10+
self.right = right
11+
12+
def __str__(self):
13+
return "TreeNode(val:%s)" % self.val
14+
15+
16+
class Solution:
17+
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
18+
19+
if root is None:
20+
return []
21+
22+
queue = deque()
23+
queue.append([root, 0])
24+
25+
result = []
26+
27+
while queue:
28+
node, depth = queue.popleft()
29+
30+
if len(result) <= depth:
31+
result.append([node.val])
32+
else:
33+
result[depth].append(node.val)
34+
35+
if node.left is not None:
36+
queue.append([node.left, depth+1])
37+
38+
if node.right is not None:
39+
queue.append([node.right, depth+1])
40+
41+
return result[::-1]
42+
43+
44+
if __name__ == '__main__':
45+
# [3,9,20,null,null,15,7]
46+
node = TreeNode(3)
47+
node.left = TreeNode(9)
48+
node.right = TreeNode(20)
49+
node.right.left = TreeNode(15)
50+
node.right.right = TreeNode(7)
51+
52+
sol = Solution()
53+
print(sol.levelOrderBottom(node))

0 commit comments

Comments
 (0)