File tree Expand file tree Collapse file tree 1 file changed +73
-0
lines changed
binary-tree-level-order-traversal Expand file tree Collapse file tree 1 file changed +73
-0
lines changed Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments