[Database] 21. 트리 생성 기법

백하림's avatar
Mar 04, 2025
[Database] 21. 트리 생성 기법
무작위 트리 생성
밸런스 트리 생성

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

harimmon