text: """
  Given a binary tree, determine if it is height-balanced.
  
  For this problem, a height-balanced binary tree is defined as:
  
  a binary tree in which the left and right subtrees of every node differ in height by no more than 1.
  
  
  
  Example 1:
  
  
  Input: root = [3,9,20,null,null,15,7]
  Output: true
  
  Example 2:
  
  
  Input: root = [1,2,2,3,3,null,null,4,4]
  Output: false
  
  Example 3:
  
  Input: root = []
  Output: true
  
  
  Constraints:
  
  The number of nodes in the tree is in the range [0, 5000].
  -10^4 <= Node.val <= 10^4
  """
  # 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 isBalanced(self, root: Optional[TreeNode]) -> bool:
          balanced, _ = self.judge(root)
  
          return balanced
  
      def judge(self, node: TreeNode):
          if node is None:
              return True, 0
          left_balanced, left_height = self.judge(node.left)
          right_balanced, right_height = self.judge(node.right)
          current_height = max(left_height, right_height) + 1
          if abs(left_height - right_height) > 1:
              current_balanced = False
          else:
              current_balanced = True
  
          return current_balanced and left_balanced and right_balanced, current_height
  