LeetCode/주제별 보충

Tree: 110. Balanced Binary Tree

hyunkookim 2025. 1. 16. 17:04

110. Balanced Binary Tree

 

# 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:
        # 높이 균형 이진 트리는 각 노드의 두 서브 트리의 깊이가 1 이상 차이가 나지 않는 이진 트리입니다.
        # height-balanced tree: 높이 균형 이진 트리는, 각 노드의 두 서브트리의 높이가 1이상 차이가 나지 않음
        if not root:
            return True

        res = []
        def dfs(node):
            if not node:
                return 0
            
            left = dfs(node.left)
            right = dfs(node.right)

            diff = left - right

            if abs(diff) > 1:
                res.append(False)
            return max(left, right) + 1 # 현재 노드 포함: +1

        dfs(root)

        return False if False in res else True # 하나라도 False 가 있으면 False

 

https://youtu.be/QfJsau0ItOY