Skip to content

Commit a81538c

Browse files
committed
binary tree level order traversal solution
1 parent e3f3af7 commit a81538c

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from collections import deque, defaultdict
2+
from typing import Optional, List
3+
4+
# Definition for a binary tree node.
5+
class TreeNode:
6+
def __init__(self, val=0, left=None, right=None):
7+
self.val = val
8+
self.left = left
9+
self.right = right
10+
11+
class Solution:
12+
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
13+
# ์•ž์œผ๋กœ์˜ ์ฝ”๋“œ๋Š” root๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ์ˆ˜ํ–‰
14+
# ๋˜ํ•œ root๊ฐ€ None์ด๋ผ๋ฉด ๊ธฐ๋กํ•ด์„œ ๋Œ๋ ค ์ค„ ๊ฐ’๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— early return
15+
if not root:
16+
return []
17+
18+
# depth๋ณ„ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋กํ•  defaultdict
19+
nodes = defaultdict(list)
20+
# bfs ํƒ์ƒ‰์— ์‚ฌ์šฉ๋  queue
21+
queue = deque()
22+
23+
# root๋Š” ์กด์žฌํ•จ์ด ๋ณด์žฅ๋˜๋ฏ€๋กœ, ๋ฐ˜๋ณต๋ฌธ์˜ ์‹œ๋™์„ ์œ„ํ•ด root node๋ฅผ queue์— ์ถ”๊ฐ€
24+
# ์ด ๋•Œ ๊นŠ์ด ์ •๋ณด๋„ ํ•จ๊ป˜ ๋ฌถ์–ด์„œ tuple๋กœ ์ถ”๊ฐ€
25+
queue.append((root, 0))
26+
27+
while queue:
28+
current = queue.popleft()
29+
30+
# ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’ ๊ธฐ๋ก
31+
nodes[current[1]].append(current[0].val)
32+
33+
# ํ˜„์žฌ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ์™€ ๊นŠ์ด ์ •๋ณด๋ฅผ ํ•จ๊ป˜ queue์— ์ถ”๊ฐ€
34+
if current[0].left:
35+
queue.append((current[0].left, current[1] + 1))
36+
37+
# ํ˜„์žฌ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ์™€ ๊นŠ์ด ์ •๋ณด๋ฅผ ํ•จ๊ป˜ queue์— ์ถ”๊ฐ€
38+
if current[0].right:
39+
queue.append((current[0].right, current[1] + 1))
40+
41+
# ๊นŠ์ด ์ˆœ์„œ๋Œ€๋กœ dict์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฏ€๋กœ, values()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜
42+
return list(nodes.values())

0 commit comments

Comments
ย (0)