Skip to content

Commit 3f27e99

Browse files
authored
[liza0525] WEEK 14 Solutions (#2629)
* [7th batch] week - binary tree level order traversal * [7th batch] week 14 - counting bits
1 parent 67ccb1a commit 3f27e99

2 files changed

Lines changed: 72 additions & 0 deletions

File tree

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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

counting-bits/liza0525.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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

0 commit comments

Comments
 (0)