- 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