File tree Expand file tree Collapse file tree
binary-tree-level-order-traversal Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ # 7기 풀이
2+ class Solution :
3+ # 풀이 1 - BFS
4+ # 시간 복잡도: O(n)
5+ # - 노드의 개수(n)만큼 모두 탐색하므로
6+ # 공간 복잡도: O(w)
7+ # - 최악은 한 레벨의 최대 노드 수(w)만큼 queue에 쌓임
8+ def levelOrder (self , root : Optional [TreeNode ]) -> List [List [int ]]:
9+ res = []
10+
11+ nodes = deque ()
12+ if root :
13+ nodes .appendleft (root )
14+
15+ while nodes :
16+ childs = deque ()
17+ sibling_vals = []
18+ while nodes :
19+ node = nodes .pop ()
20+ if not node :
21+ continue
22+
23+ sibling_vals .append (node .val )
24+ if node .left :
25+ childs .appendleft (node .left )
26+ if node .right :
27+ childs .appendleft (node .right )
28+
29+ res .append (sibling_vals )
30+ nodes = childs
31+
32+ return res
33+
34+ # 풀이 2 - DFS
35+ # 시간 복잡도: O(n)
36+ # - 노드의 개수(n)만큼 모두 탐색하므로
37+ # 공간 복잡도: O(h)
38+ # - 재귀 스택이 최대 나무의 높이(h)만큼 쌓임
39+ def levelOrder (self , root : Optional [TreeNode ]) -> List [List [int ]]:
40+ res = []
41+
42+ def dfs (node , depth ):
43+ if not node :
44+ return
45+
46+ if len (res ) == depth :
47+ res .append ([node .val ])
48+ else :
49+ res [depth ].append (node .val )
50+
51+ dfs (node .left , depth + 1 )
52+ dfs (node .right , depth + 1 )
53+
54+ dfs (root , 0 )
55+
56+ return res
Original file line number Diff line number Diff line change 1+ # 7기 풀이
2+ # 시간 복잡도: O(n)
3+ # - n의 크기만큼 모든 수에 대한 dp 값을 찾음
4+ # 공간 복잡도: O(n)
5+ # - n의 크기만큼 dp 어레이를 사용
6+ class Solution :
7+ def countBits (self , n : int ) -> List [int ]:
8+ dp = [0 for _ in range (n + 1 )]
9+
10+ for i in range (1 , n + 1 ):
11+ if i % 2 == 1 :
12+ dp [i ] = dp [i - 1 ] + 1
13+ else :
14+ dp [i ] = dp [i // 2 ]
15+
16+ return dp
You can’t perform that action at this time.
0 commit comments