inblog logo
|
jjack1
    데이터베이스MySQL

    [DB] 12. 인덱스 Ⅰ. 트리 생성 기법

    최재원's avatar
    최재원
    Mar 05, 2025
    [DB] 12. 인덱스 Ⅰ. 트리 생성 기법
    Contents
    1. 무작위2. 이진 탐색 트리(Binary Search Tree, BST)3. 밸런스 트리예제 1: LL 회전 (Right Rotation)📝 예제 2: RR 회전 (Left Rotation)
    ❗
    무작위 트리 생성
    밸런스 트리 생성
     

    1. 무작위

    ❗
    그냥 막 넣음

    2. 이진 탐색 트리(Binary Search Tree, BST)

    ❗
    값을 비교해서 넣음
    다음 숫자를 순서대로 삽입: 50, 30, 70, 20, 40, 60, 80

    1️⃣ 50 삽입

    50

    2️⃣ 30 삽입 (50보다 작으므로 왼쪽)

    50 / 30

    3️⃣ 70 삽입 (50보다 크므로 오른쪽)

    50 / \ 30 70

    4️⃣ 20 삽입 (30보다 작으므로 30의 왼쪽)

    50 / \ 30 70 / 20

    5️⃣ 40 삽입 (30보다 크므로 30의 오른쪽)

    50 / \ 30 70 / \ 20 40

    6️⃣ 60 삽입 (70보다 작으므로 70의 왼쪽)

    50 / \ 30 70 / \ / 20 40 60

    7️⃣ 80 삽입 (70보다 크므로 70의 오른쪽)

    50 / \ 30 70 / \ / \ 20 40 60 80
    ✅ 결과적으로, 삽입을 할 때 항상 왼쪽(작은 값) / 오른쪽(큰 값)으로 이동하여 적절한 위치를 찾음.
     

    3. 밸런스 트리

    ❗

    AVL 트리 (Adelson-Velsky and Landis Tree)

    • 모든 노드에서 왼쪽과 오른쪽 서브트리의 높이 차이가 1 이하가 되도록 유지
    • 불균형이 발생하면 회전(Rotation) 연산을 통해 균형을 맞춤

    예제 1: LL 회전 (Right Rotation)

    🔹 삽입 전

    다음과 같은 트리를 고려해봅시다.
    30 / 20 / 10
    여기서 10을 삽입하면서 왼쪽 서브트리가 깊이가 2가 되어 불균형 발생
    (불균형: 왼쪽-왼쪽 LL 케이스)

    🔹 해결 방법: 오른쪽 회전(Right Rotation)

    • *30이 중심(root)**에서 20으로 내려가고
    • 20이 새로운 루트가 되며,
    • 10은 그대로 유지됨

    🔹 회전 후 (균형 유지)

    20 / \ 10 30

    📝 예제 2: RR 회전 (Left Rotation)

    🔹 삽입 전

    다음과 같은 트리를 고려해봅시다.
    10 \ 20 \ 30
    여기서 30을 삽입하면서 오른쪽 서브트리가 깊이가 2가 되어 불균형 발생
    (불균형: 오른쪽-오른쪽 RR 케이스)

    🔹 해결 방법: 왼쪽 회전(Left Rotation)

    • *10이 중심(root)**에서 20으로 내려가고
    • 20이 새로운 루트가 되며,
    • 30은 그대로 유지됨

    🔹 회전 후 (균형 유지)

    20 / \ 10 30
    Share article

    jjack1

    RSS·Powered by Inblog