본문 바로가기
Leetcode

110. Balanced Binary Tree

by Doromi 2023. 11. 4.
728x90
반응형
주어진 이진 트리가 균형 잡힌 트리인지 확인하세요. 균형 잡힌 트리는 모든 서브트리의 높이 차이가 1 이하인 트리를 의미합니다. 즉, 모든 서브트리가 높이 균형을 유지하고 있는 경우 균형 잡힌 트리입니다.

예를 들어, 다음은 균형 잡힌 트리입니다:
    3
   / \
  9  20
    /  \
   15   7

 

각 서브트리의 높이 차이가 1 이하입니다. 반면에, 다음 트리는 균형 잡힌 트리가 아닙니다:
            1
           / \
          2   2
         / \
        3   3
      / \
     4   4
여기서 왼쪽 서브트리와 오른쪽 서브트리의 높이 차이가 2이므로 균형 잡힌 트리가 아닙니다.

균형 잡힌 트리 여부를 판단하기 위해, 주어진 트리의 각 노드에서 왼쪽 서브트리와 오른쪽 서브트리의 높이를 비교하여 높이 차이가 1 이하인지 확인해야 합니다. 이 작업을 트리의 모든 노드에 대해 재귀적으로 수행합니다.

균형 잡힌 트리는 트리의 높이가 더 균등하게 분포되어 있으므로, 높이 차이를 효율적으로 계산하여 모든 노드에서 높이 차이가 1 이하인지 확인하는 것이 중요합니다.

 

public class Solution {
    public bool IsBalanced(TreeNode root) {
        if (root == null) {
            return true; // 빈 트리는 균형 잡힌 트리입니다.
        }
        
        int leftHeight = GetHeight(root.left);
        int rightHeight = GetHeight(root.right);
        
        if (Math.Abs(leftHeight - rightHeight) < 2 && IsBalanced(root.left) && IsBalanced(root.right)) {
            return true;
        }
        
        return false;
    }
    
    private int GetHeight(TreeNode node) {
        if (node == null) {
            return 0;
        }
        
        int leftHeight = GetHeight(node.left);
        int rightHeight = GetHeight(node.right);
        
        // 높이는 좌우 서브트리 중에서 큰 높이에 1을 더한 값
        return Math.Max(leftHeight, rightHeight) + 1;
    }
}

 

if (Math.Abs(leftHeight - rightHeight) < 2 && IsBalanced(root.left) && IsBalanced(root.right)) {
    return true;
}

IsBalanced 메서드를 호출하는 이유는 현재 노드의 서브트리가 균형 잡힌 트리인지 여부를 확인하기 위함입니다. 이 부분은 트리의 각 노드에서 좌우 서브트리의 균형 여부를 확인하고, 현재 노드의 균형 여부를 결정하기 위한 부분입니다.

특히, 다음 부분에서 IsBalanced(root.left)와 IsBalanced(root.right)를 호출하여 왼쪽 서브트리와 오른쪽 서브트리가 각각 균형 잡힌 트리인지 확인합니다:

 

이 코드는 현재 노드 root의 높이 차이가 1 이하이고, 왼쪽 서브트리와 오른쪽 서브트리 모두가 균형 잡힌 트리일 때 현재 노드 root도 균형 잡힌 트리라고 판단합니다. 이렇게 재귀 호출을 통해 트리의 각 레벨에서 균형 여부를 확인하고, 전체 트리의 균형 여부를 판단하는 방식으로 동작합니다.
728x90
반응형

'Leetcode' 카테고리의 다른 글

145. Binary Tree Postorder Traversal  (0) 2023.11.05
141. Linked List Cycle  (0) 2023.11.05
70. Climbing Stairs  (0) 2023.11.03
101. Symmetric Tree  (0) 2023.11.01
414. Third Maximum Number  (0) 2023.11.01