text: '''
  Given the root of a binary tree, return its maximum depth.
  
  A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
  
   
  
  Example 1:
  
  
  Input: root = [3,9,20,null,null,15,7]
  Output: 3
  Example 2:
  
  Input: root = [1,null,2]
  Output: 2
   
  
  Constraints:
  
  The number of nodes in the tree is in the range [0, 104].
  -100 <= Node.val <= 100
  '''
  # Definition for a binary tree node.
  # class TreeNode:
  #     def __init__(self, val=0, left=None, right=None):
  #         self.val = val
  #         self.left = left
  #         self.right = right
  class Solution:
      def __init__(self):
          self.max_height = 0
          
      def depth(self, head, height):
                if (head is None):
                           if (height > self.max_height):
                              self.max_height = height
                           
                           return 
                
                self.depth(head.left, height+1)
                  
                self.depth(head.right,height+1)
                
                   
                 
      def maxDepth(self, root: Optional[TreeNode]) -> int:
                       head = root
                       if head is None:
                            return 0
                       self.depth(head,0)
                       
                       return self.max_height
                       
                       