- 순서
- 트리란?
- 트리에 사용되는 용어
- AVL트리란?
- 레드-블랙트리란?
- 이진탐색트리(BST)
- 레드-블랙트리와 AVL트리 비교
- AVL트리가 STL 컨테이너로부터 간택받을 수 없는 이유
- 트리란?
- 트리란 계층적인 자료구조이다.
- 하나의 루트(root)노드에서 시작하여 자식 노드로 나눠짐
- 그래프의 한 종류지만 사이클이 없는 형태
- 트리의 용도
- 계층적 데이터 표현
- 탐색 및 정렬
- 우선순위 큐(힙)
- 파싱 등
- 트리에 사용되는 용어
- 루트 노드: 트리의 가장 위에 있는 노드를 뜻함
- 리프 노드: 자식이 없는 노드
- 부모/자식: 연결된 두 노드의 관계를 뜻함
- 서브트리: 트리의 일부로서 하나의 노드와 그 하위 노드들
- 높이: 루트에서 가장 깊은 리프까지의 거리
- AVL트리란?
- 각 노드의 왼쪽, 오른쪽 서브트리 높이 차이가 1 이하가 되도록 자동으로 균형을 유지하는 이진 탐색 트리
- 밸런스 팩터 ∈ {-1, 0, 1} : 밸런스팩터는 -1, 0 1 중 하나여야한다는 뜻
- AVL트리에서 각 노드가 얼마나 균형이 잡혀있는지 나타내는 값이다.
- 각 노드에 밸런스 팩터 = 왼쪽 서브트리 높이 - 오른쪽 서브트리 높이
- 해당 범위라면 트리가 균형상태
- 삽입/삭제 후 밸런스 팩터를 벗어나면 회전으로 균형을 맞춤
- LL, RR, LR, RL 4가지 회전 패턴이 있음




- 높이 O(long n)
- 레드-블랙트리란?
- 각 노드가 레드 혹은 블랙으로 색칠해 느슨한 균형을 유지하는 이진 탐색 트리.
- 레드-블랙트리의 균형규칙
- 루트와 모든 리프는 블랙이다.
- 레드는 연속될 수 없다. - 레드 노드의 자식은 블랙
- 루트에서 리프까지 모든 경로의 블랙 노드 수는 동일함.
- 삽입/삭제 시 색 변경과 회전으로 균형이 유지됨
- 높이 O(log n)
- 이진 탐색트리(BST)
- 한 노드를 기준으로 왼쪽으로 갈수록 값이 작고, 오른쪽으로 갈수록 값이 큰 규칙을 가진 트리
- 각 노드의 왼쪽 서브트리 값 < 현재 노드 값 < 오른쪽 서브트리 값
- 탐색, 삽입, 삭제가 O(h)(h = 높이)
- 문제점: 한쪽으로 치우치면 O(n)까지 성능이 저하됨 => 균형잡힌 트리가 필요함
- 레드-블랙트리와 AVL트리 비교
- 균형 유지방식: 레드-블랙트리는 느슨한 균형이지만 AVL트리는 엄격한 균형을 유지함
- 삽입/삭제 비용: 레드-블랙트리는 적은 재구성을 함(최대 3회 회전), AVL트리는 삭제 시 재구성 비용이 큼(최대 O(log n)회 회전)
- 검색 속도: 레드-블랙트리는 약간 느림, AVL 트리는 빠름
- 회전 발생 빈도: 레드-블랙트리는 빈도가 적지만 AVL 트리는 많음
- 용도: 레드-블랙트리는 STL에 사용됨, AVL트리는 데이터베이스 인덱스 등 검색 최적화
- 높이: 레드-블랙트리는 최대 2 * log₂(n+1) - 1이고 AVL트리는 약 log₁.₆₁₈(n)이다.
- AVL트리가 STL컨테이너로부터 간택받을 수 없는 이유
- 삽입/삭제 성능 면에서 AVL이 많은 회전으로 인해 느리기 때문
- 전체적인 효율로 검색은 AVL이 조금 빠르지만 삽입/삭제가 상대적으로 느리기 때문이다.
- 구현 난이도면에서 AVL은 삭제 시 복잡도가 높아짐
'CS > 자료구조' 카테고리의 다른 글
| [자료구조] map/unordered_map (0) | 2025.09.12 |
|---|---|
| [자료구조] vector와 list (0) | 2025.08.11 |
| [자료구조] Stack/Heap Memory (0) | 2025.08.05 |
| [C++] 우선순위 큐 (1) | 2025.07.24 |