|
1 |
| -# Definition for a binary tree node. |
| 1 | +# ์ด์ง ํธ๋ฆฌ์ ๋
ธ๋๋ฅผ ์ ์ํ๋ ํด๋์ค |
2 | 2 | class TreeNode:
|
3 | 3 | def __init__(self, val=0, left=None, right=None):
|
4 |
| - self.val = val |
5 |
| - self.left = left |
6 |
| - self.right = right |
| 4 | + self.val = val # ๋
ธ๋์ ๊ฐ |
| 5 | + self.left = left # ์ผ์ชฝ ์์ ๋
ธ๋ |
| 6 | + self.right = right # ์ค๋ฅธ์ชฝ ์์ ๋
ธ๋ |
| 7 | + |
7 | 8 |
|
8 | 9 | class Solution:
|
9 | 10 | def maxDepth(self, root: TreeNode) -> int:
|
10 |
| - # ๋ฃจํธ๊ฐ None์ด๋ฉด ๊น์ด๋ 0 |
| 11 | + # ์ด๊ธฐ ์กฐ๊ฑด ํ์ธ. ํธ๋ฆฌ๊ฐ ๋น์ด ์๋ ๊ฒฝ์ฐ ๊น์ด๋ 0 |
11 | 12 | if not root:
|
12 | 13 | return 0
|
13 | 14 |
|
14 |
| - # ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ์ต๋ ๊น์ด๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๊ณ์ฐ |
15 |
| - left_depth = self.maxDepth(root.left) |
16 |
| - right_depth = self.maxDepth(root.right) |
| 15 | + # ํ์ ๋ฃจํธ ๋
ธ๋๋ฅผ ์ถ๊ฐ, ๊น์ด๋ฅผ 0์ผ๋ก ์ด๊ธฐํ |
| 16 | + queue = [root] |
| 17 | + depth = 0 |
17 | 18 |
|
18 |
| - # ํ์ฌ ๋
ธ๋์ ๊น์ด(1) + ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์ค ๋ ํฐ ๊น์ด |
19 |
| - return 1 + max(left_depth, right_depth) |
20 |
| - |
21 |
| -# ํ
์คํธ ์ฝ๋ |
22 |
| -def create_binary_tree(lst): |
23 |
| - if not lst: |
24 |
| - return None |
25 |
| - |
26 |
| - root = TreeNode(lst[0]) |
27 |
| - queue = [root] |
28 |
| - i = 1 |
| 19 | + # ๋๋น์ฐ์ ํ์(BFS) ์คํ. ํ๊ฐ ๋น์ด์์ง ์์ ๋์ ๋ฐ๋ณต |
| 20 | + while queue: |
| 21 | + # ์๋ก์ด ๋ ๋ฒจ ์์๋ ๋๋ง๋ค ๊น์ด ์ฆ๊ฐ |
| 22 | + depth += 1 |
| 23 | + # ํ์ฌ ๋ ๋ฒจ์ ๋
ธ๋ ์ ์ ์ฅ |
| 24 | + level_size = len(queue) |
| 25 | + |
| 26 | + # ํ์ฌ ๋ ๋ฒจ์ ๋ชจ๋ ๋
ธ๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ |
| 27 | + for _ in range(level_size): |
| 28 | + # ํ์์ ๋
ธ๋ ํ๋ ๊บผ๋ด๊ธฐ |
| 29 | + node = queue.pop(0) |
| 30 | + |
| 31 | + # ์์ ๋
ธ๋ ์ฒ๋ฆฌ. ๋ค์ ๋ ๋ฒจ์ ๋
ธ๋๋ค์ด ๋จ |
| 32 | + ## ์ผ์ชฝ ์์์ด ์์ผ๋ฉด ํ์ ์ถ๊ฐ |
| 33 | + if node.left: |
| 34 | + queue.append(node.left) |
| 35 | + ## ์ค๋ฅธ์ชฝ ์์์ด ์์ผ๋ฉด ํ์ ์ถ๊ฐ |
| 36 | + if node.right: |
| 37 | + queue.append(node.right) |
29 | 38 |
|
30 |
| - while queue and i < len(lst): |
31 |
| - current = queue.pop(0) |
32 |
| - |
33 |
| - if lst[i] is not None: |
34 |
| - current.left = TreeNode(lst[i]) |
35 |
| - queue.append(current.left) |
36 |
| - i += 1 |
37 |
| - |
38 |
| - if i < len(lst) and lst[i] is not None: |
39 |
| - current.right = TreeNode(lst[i]) |
40 |
| - queue.append(current.right) |
41 |
| - i += 1 |
42 |
| - |
43 |
| - return root |
44 |
| - |
45 |
| -# ํ
์คํธ ์ผ์ด์ค |
46 |
| -solution = Solution() |
47 |
| - |
48 |
| -# ํ
์คํธ ์ผ์ด์ค 1: [3,9,20,None,None,15,7] |
49 |
| -tree1 = create_binary_tree([3,9,20,None,None,15,7]) |
50 |
| -print(solution.maxDepth(tree1)) # 3 ์ถ๋ ฅ |
51 |
| - |
52 |
| -# ํ
์คํธ ์ผ์ด์ค 2: [1,None,2] |
53 |
| -tree2 = create_binary_tree([1,None,2]) |
54 |
| -print(solution.maxDepth(tree2)) # 2 ์ถ๋ ฅ |
| 39 | + # ์ต์ข
๊น์ด ๋ฐํ |
| 40 | + return depth |
55 | 41 |
|
56 |
| -# ํ
์คํธ ์ผ์ด์ค 3: [] |
57 |
| -tree3 = create_binary_tree([]) |
58 |
| -print(solution.maxDepth(tree3)) # 0 ์ถ๋ ฅ |
| 42 | + #์๊ฐ ๋ณต์ก๋ (Time Complexity): O(n) |
| 43 | + #n: ํธ๋ฆฌ์ ์ด ๋
ธ๋ ์ |
| 44 | + #์ด์ : |
| 45 | + #๊ฐ ๋
ธ๋๋ฅผ ์ ํํ ํ ๋ฒ์ฉ๋ง ๋ฐฉ๋ฌธ |
| 46 | + #๊ฐ ๋
ธ๋์์์ ์ฐ์ฐ(์ถ๊ฐ, ์ ๊ฑฐ)์ ์์ ์๊ฐ |
| 47 | + #๋ฐ๋ผ์ ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ O(n) |
| 48 | + #๊ณต๊ฐ ๋ณต์ก๋ (Space Complexity): O(n) |
| 49 | + #์ต์
์ ๊ฒฝ์ฐ: O(n) |
| 50 | + #ํ๊ท ์ ์ธ ๊ฒฝ์ฐ: O(n/2) โ O(n) |
| 51 | + #์ด์ : |
| 52 | + #ํ์ ์ ์ฅ๋๋ ์ต๋ ๋
ธ๋ ์๋ ํธ๋ฆฌ์ ์ต๋ ๋๋น |
| 53 | + #์์ ์ด์ง ํธ๋ฆฌ์ ๊ฒฝ์ฐ ๋ง์ง๋ง ๋ ๋ฒจ์ ์ฝ n/2๊ฐ์ ๋
ธ๋๊ฐ ์์ ์ ์์ |
| 54 | + #๋ฐ๋ผ์ ๊ณต๊ฐ ๋ณต์ก๋๋ O(n) |
0 commit comments