- Reference
- ์๊ฐ๋ณต์ก๋: $O(N)$
- Runtime
54ms
- Beats
27.2%
- ์ด๊ฑฐ ์ ๋ easy ์๋๋ค..
Solution
# Definition for a binary tree node.
from typing import Optional
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
# root๋ฅผ ์ง๋ ์๋ ์๊ณ , ์ ์ง๋ ์๋ ์์
# ๊ฑฐ๊พธ๋ก ์ฌ๋ผ๊ฐ์ผ ๋จ
def __init__(self):
self.branch_count = None
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
# self๋ฅผ ๋ถ์ด๋ฉด ์ด ํด๋์ค์ ์ธ์คํด์ค ๋ณ์๋ฅผ ์์ฑํด์ค๋ค๋ ๋ป์
# ๊ทธ๋์ self๋ก ํด๋์ค ๋ด์ ์๋ ๋ชจ๋ ์ธ์คํด์ค ๋ฉ์๋์์ ์ฌ์ฉ ๊ฐ๋ฅ (์ฌ๊ธฐ์ dfs())
# ๊ฒฐ๋ก : self == instance, ์๋ฐ ์ธ์คํด์ค๋ ๋๊ฐ์ (private ์ฒ๋ฆฌ ์ ๋ ์ธ์คํด์ค ๋ณ์)
self.branch_count = 0
# run()
self.dfs(root)
return self.branch_count
def dfs(self, node):
# node๊ฐ null์ด๋ฉด 0 ๋ฆฌํด
if node is None:
return 0
# ๋ง์ง๋ง ๋
ธ๋๋ถํฐ ์ฐพ๊ณ (์ฌ๊ท ์ด์ฉ)
left = self.dfs(node.left)
right = self.dfs(node.right)
# ์ด์ ๊ฑฐ๊พธ๋ก ์ฌ๋ผ๊ฐ์ผ์ง
# ๋
ธ๋๋ฅผ ํต๊ณผํ๋ ๊ฐ์ฅ ๊ธด ๋๋ญ๊ฐ์ง ๊ณ์ฐ (๊ฐ๊ฐ์ left์ right์ ๊ฒฝ๋ก)
# left์ right์ ์์ ๋
ธ๋ ๊ฑฐ๋ฆฌ์ ํฉ์ ์ต๋๊ฐ
self.branch_count = max(self.branch_count, left + right)
# ์ฌ๊ทํจ์ ์ง๋๊ฐ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐํด์ผ ๋๋
# ์์ ๋
ธ๋ ์ค ํฐ ๊ฐ
return max(left, right) + 1
Leave a comment