
균형 이진 탐색 트리(Balanced Binary Search Tree, 이하 BBST)는 이진 탐색 트리의 성능 문제를 해결하기 위해 고안된 자료구조입니다. 균형 트리는 노드가 추가되거나 삭제될 때 트리의 높이를 일정 수준으로 유지하여 탐색, 삽입, 삭제 연산의 효율성을 보장합니다.
균형 이진 탐색 트리는 트리의 높이가 가능한 낮게 유지되도록 설계된 구조입니다. 이로 인해 최악의 경우에도 O(log n)의 시간 복잡도를 유지할 수 있습니다.
균형 트리는 삽입과 삭제가 발생할 때 재조정을 통해 트리의 균형을 유지합니다. 이를 통해 탐색 시간이 O(n)으로 악화되는 문제를 방지합니다.
| 구분 | 일반 이진 탐색 트리 | 균형 이진 탐색 트리 |
|---|---|---|
| 트리 높이 | 최악 O(n) | O(log n) |
| 삽입/삭제 연산 복잡도 | 최악 O(n) | O(log n) |
| 트리 균형 유지 비용 | 없음 | 있음 |
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
self.height = 1
def get_height(node):
return node.height if node else 0
def rotate_right(y):
x = y.left
T2 = x.right
x.right = y
y.left = T2
y.height = 1 + max(get_height(y.left), get_height(y.right))
x.height = 1 + max(get_height(x.left), get_height(x.right))
return x
def rotate_left(x):
y = x.right
T2 = y.left
y.left = x
x.right = T2
x.height = 1 + max(get_height(x.left), get_height(x.right))
y.height = 1 + max(get_height(y.left), get_height(y.right))
return y
일반 BST의 최악 시간 복잡도는 O(n)이지만, 균형 트리는 항상 O(log n)을 보장합니다.