|
| 1 | + |
| 2 | +class Solution: |
| 3 | + def maxDepth(self, root: Optional['TreeNode']) -> int: |
| 4 | + """ |
| 5 | + ๋ฌธ์ |
| 6 | + - ์ด์งํธ๋ฆฌ์ ์ต๋ ๊น์ด๋ฅผ ๊ตฌํ๋ผ. |
| 7 | +
|
| 8 | + ์์ด๋์ด (์ฌ๊ท DFS) |
| 9 | + - ๊ณต์งํฉ(None)์ ๊น์ด๋ 0 |
| 10 | + - ํ์ฌ ๋
ธ๋ ๊น์ด = max(์ผ์ชฝ ์๋ธํธ๋ฆฌ ๊น์ด, ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๊น์ด) + 1 |
| 11 | +
|
| 12 | + ์๊ฐ๋ณต์ก๋: O(n) โ ๊ฐ ๋
ธ๋๋ฅผ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธ |
| 13 | + ๊ณต๊ฐ๋ณต์ก๋: O(h) โ ์ฌ๊ท ์คํ(h๋ ํธ๋ฆฌ ๋์ด; ์ต์
O(n), ํ๊ท O(log n)) |
| 14 | + """ |
| 15 | + # 1) ๋น ํธ๋ฆฌ์ด๋ฉด ๊น์ด 0 |
| 16 | + if not root: |
| 17 | + return 0 |
| 18 | + |
| 19 | + # 2) ์ผ์ชฝ/์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ์ต๋ ๊น์ด๋ฅผ ๊ตฌํ๋ค |
| 20 | + left_depth = self.maxDepth(root.left) |
| 21 | + right_depth = self.maxDepth(root.right) |
| 22 | + |
| 23 | + # 3) ํ์ฌ ๋
ธ๋์ ๊น์ด = ๋ ํฐ ์๋ธํธ๋ฆฌ ๊น์ด + 1(ํ์ฌ ๋
ธ๋ ํฌํจ) |
| 24 | + return max(left_depth, right_depth) + 1 |
| 25 | +# dfs(3) - ์ผ์ชฝ์ผ๋ก ์ด๋ |
| 26 | +# dfs(9) - ์ผ์ชฝ์ผ๋ก ์ด๋ |
| 27 | +# dfs(None) -> 0 |
| 28 | +# dfs(9) - ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ |
| 29 | +# dfs(None) -> 0 |
| 30 | +# dfs(9) ๋ฐํ: max(0,0)+1 = 1 |
| 31 | +# dfs(3) - ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ |
| 32 | +# dfs(20) - ์ผ์ชฝ์ผ๋ก ์ด๋ |
| 33 | +# dfs(15) - ์ผ์ชฝ์ผ๋ก ์ด๋ |
| 34 | +# dfs(None) -> 0 |
| 35 | +# dfs(15) - ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ |
| 36 | +# dfs(None) -> 0 |
| 37 | +# dfs(15) ๋ฐํ: max(0,0)+1 = 1 |
| 38 | +# dfs(20) - ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ |
| 39 | +# dfs(7) - ์ผ์ชฝ์ผ๋ก ์ด๋ |
| 40 | +# dfs(None) -> 0 |
| 41 | +# dfs(7) - ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ |
| 42 | +# dfs(None) -> 0 |
| 43 | +# dfs(7) ๋ฐํ: max(0,0)+1 = 1 |
| 44 | +# dfs(20) ๋ฐํ: max(1,1)+1 = 2 |
| 45 | +# dfs(3) ๋ฐํ: max(1,2)+1 = 3 |
| 46 | +# ์ต์ข
๊ฒฐ๊ณผ: 3 |
0 commit comments