Red-Black Tree
참고 자료
- Red/Black Tree visualization @ usfca
- 쉬운코드 on Youtube - 레드블랙트리(red-black tree)
1. 개념.¶
Red-Black 트리
- 이진 탐색 트리 (BST)의 한 종류
- 스스포 균형 잡는 트리
- BST 의 worst case 의 단점을 개선한다.
- 트리의 편향을 막는다.
NIL 노드
- 존재하지 않음을 의미하는 노드
- 자녀가 없을 때 자녀를 NIL 노드로 표기
- 값이 있는 노드와 동등하게 취급
- RB 트리에서 leaf 노드는 NIL 노드
Red-Black 트리가 만족하는 속성
- 모든 노드는 red 혹은 black
- 루트 노드는 black
- 모든 NIL(leaf) 노드는 black
- red의 자녀들은 black
or
red가 연속적으로 존재할 수 없다. - 임의의 노드에서 NIL 노드 까지 가는 경로의 Black 수는 같다. (자기 자신은 제외) -
Black Height
RB 트리는 삽입/삭제 시 주로 #4, #5를 위반하며 이들을 해결하려 구조를 바꾸다 보면 자연스럽게 트리의 균형이 잡히게 된다.
2. 삽입¶
- 일반적인 BST 의 삽입 과정과 동일하다.
- 삽입하는 노드의 색깔은 red
- 속성의 위반이 발생하면 재조정
#### 1. insert(50)
-> insert(20)
-> insert(10)
에서 마지막 insert(10)
을 처리 하는 과정
2. insert(50)
-> insert(20)
-> insert(40)
에서 마지막 insert(40)
을 처리 하는 과정¶
3. 위 상태에서 insert(30)
을 처리하는 과정¶
3. 삭제.¶
- 일반적인 BST 처럼 삭제
-
삭제 후 속성 위반 여부를 확인하고 재조정
-
Step 1. 삭제되는 노드의 색 확인
- 삭제되는 노드의 색
- 자녀가 두개 라면 successor 의 색
- 그렇지 않다면 자신의 색
- 삭제되는 색이 red 라면 어떠한 속성도 위반하지 않는다.
- 삭제되는 노드의 색
- Step 2. 삭제 후 재조정
4. 시간 복잡도¶
best | avg | worst | |
---|---|---|---|
insert | Θ(1) | O(logN) | O(logN) |
delete | Θ(1) | O(logN) | O(logN) |
search | Θ(1) | O(logN) | O(logN) |
5. AVL 트리와의 비교¶
참고 자료
- ebongzzang - RB Tree
RB tree | AVL tree | |
---|---|---|
BST | Yes | Yes |
time complexity | O(logN) | O(logN) |
삽입/삭제 | AVL 보다 빠름 | RB 보다 느림 |
검색 | AVL 보다 느림 | RB 보다 빠름 |
self-balancing | r/b 속성을 만족 | balance factor 를 통해 |
활용 | linkx kernel 내부 Java TreeMap c++ std::map ... |
dictionary 검색이 대부분인 경우 |
Last update:
March 22, 2023
Created: March 22, 2023
Created: March 22, 2023