반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

멋진 개발자가 되고 싶다

[LeetCode/Python]110.균형 이진 트리(Balanced Binary Tree) 본문

Algorithm Study/leetcode

[LeetCode/Python]110.균형 이진 트리(Balanced Binary Tree)

오패산개구리 2021. 8. 8. 19:20
728x90
반응형

 

 

이진 트리가 높이 균형인지 판단하라.

 

※ 높이 균형은 모든 노드의 서브 트리 간의 높이 차이가 1 이하인 것을 말한다.

 

 

 

 

 

1. 재귀 구조로 높이 차이 계산

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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:
        def check(root):
            if not root:
                return 0
            
            left = check(root.left)
            right = check(root.right)
            # 높이 차이가 나는 경우 -1, 이외에는 높이에 따라 1 증가
            if left == -1 or right == -1 or abs(left - right) > 1:
                return -1
            return max(left,right) + 1
        return check(root) != -1
cs

 

해설

 

리프 노드부터 높이를 쌓아 올려 나간다.

 

그러다 왼쪽과 오른쪽 높이 차이가 2 이상 나면

 

높이가 불균형이기 때문에

 

-1을 리턴하고 이후 left나 right가 계속 -1이기 때문에

 

dfs의 최종 리턴 값은 -1이 된다.

 

따라서 check의 리턴 값이 -1이면 False

 

그 이외의 값이면 True를 리턴한다.

728x90
반응형