[c++] 균형 이진 트리(Balanced Binary Tree)

이진 트리(Binary Tree)는 각 노드가 최대 두 개의 자식 노드를 가지는 자료구조입니다. 균형 이진 트리(Balanced Binary Tree)는 서브트리의 높이 차가 1 이하인 이진 트리를 의미합니다. 이러한 균형 이진 트리는 검색을 빠르게 수행할 수 있어 많은 응용 분야에서 사용됩니다.

균형 이진 트리의 특징

  1. 모든 리프 노드들은 높이 차가 1 이하입니다.
  2. 모든 노드의 왼쪽과 오른쪽 서브트리의 높이 차가 1 이하입니다.
  3. 모든 서브트리도 균형 이진 트리여야 합니다.

균형 이진 트리의 구현

#include <iostream>
#include <cmath>

class TreeNode {
public:
    int value;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int val) : value(val), left(nullptr), right(nullptr) {}
};

int height(TreeNode* node) {
    if (node == nullptr) {
        return 0;
    }
    return 1 + std::max(height(node->left), height(node->right));
}

bool isBalanced(TreeNode* root) {
    if (root == nullptr) {
        return true;
    }
    int leftHeight = height(root->left);
    int rightHeight = height(root->right);
    return std::abs(leftHeight - rightHeight) <= 1 && isBalanced(root->left) && isBalanced(root->right);
}

int main() {
    TreeNode* root = new TreeNode(1);
    root->left = new TreeNode(2);
    root->right = new TreeNode(3);
    root->left->left = new TreeNode(4);
    root->left->right = new TreeNode(5);
    root->right->right = new TreeNode(6);
    
    if (isBalanced(root)) {
        std::cout << "The tree is balanced" << std::endl;
    } else {
        std::cout << "The tree is not balanced" << std::endl;
    }
    
    return 0;
}

결론

균형 이진 트리는 트리의 높이가 최소화되어 검색 연산을 효율적으로 수행할 수 있는 자료구조입니다. 트리를 구현하거나 쿼리하는 경우, 균형 이진 트리를 사용하여 성능을 향상시킬 수 있습니다.

참고 문헌: