Skip to content

Commit a49a4be

Browse files
committed
solve(w14): 102. Binary Tree Level Order Traversal
1 parent eef3a80 commit a49a4be

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# https://leetcode.com/problems/binary-tree-level-order-traversal/
2+
3+
from typing import Optional, List
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+
class Solution:
13+
def levelOrder_bfs(self, root: Optional[TreeNode]) -> List[List[int]]:
14+
"""
15+
[Complexity]
16+
- TC: O(n)
17+
- SC: O(width) (최악의 경우 O(n)) (결과 res 제외)
18+
19+
[Approach]
20+
레벨 별로 BFS로 접근
21+
"""
22+
if not root:
23+
return []
24+
25+
res, level = [], [root]
26+
27+
while level:
28+
# res에 현재 level 내 node value 추가
29+
res.append([node.val for node in level])
30+
31+
# next level의 node로 level 업데이트
32+
level = [child for node in level for child in (node.left, node.right) if child]
33+
# next_level = []
34+
# for node in level:
35+
# if node.left:
36+
# next_level.append(node.left)
37+
# if node.right:
38+
# next_level.append(node.right)
39+
# level = next_level
40+
41+
return res
42+
43+
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
44+
"""
45+
[Complexity]
46+
- TC: O(n)
47+
- SC: O(height) (call stack) (결과 res 제외)
48+
49+
[Approach]
50+
레벨 별로 DFS로 접근
51+
"""
52+
if not root:
53+
return []
54+
55+
res = []
56+
57+
def dfs(node, level):
58+
# base condition (각 level의 첫 시작)
59+
if len(res) == level:
60+
res.append([])
61+
62+
# 현재 level에 node.val 추가
63+
res[level].append(node.val)
64+
65+
# node의 child에 대해 다음 level로 진행
66+
if node.left:
67+
dfs(node.left, level + 1)
68+
if node.right:
69+
dfs(node.right, level + 1)
70+
71+
dfs(root, 0)
72+
73+
return res

0 commit comments

Comments
 (0)