
O(logN)O(N) = 모든 노드를 한번씩 확인해야 함
- 모든 노드는 Red 혹은 Black
- 루트 노드는 Black
- 모든 nill(leaf)노드는 Black
- Red 의 자녀들은 Black ( = Red 는 연속적으로 존재할 수 없다 )
- 임의의 노드에서 자손 nill 노드들까지 가는 경로들의 Black 수는 같다 ( 자기 자신은 카운트에서 제외 )
5a. 노드 x의 Black height
black 의 개수 (자기 자신 제외)5b. 색 바꾸기
부모와 두 자녀의 색을 바꿔도 5번 속성은 여전히 만족#4, #5를 위반해서 이들을 해결하려고 구조를 바꾸다보면, 자연스럽게 트리의 균형이 잡히게 된다.| AVG | Worst | |
|---|---|---|
| Insert | O(logN) | O(logN) |
| Delete | O(logN) | O(logN) |
| Search | O(logN) | O(logN) |
| RB | AVL | |
|---|---|---|
| Binary Search Tree | Yes | Yes |
| 삽입/삭제/검색 시간 복잡도 | wort case 에서도 O(longN) | wort case 에서도 O(longN) |
| 삽입/삭제 성능 | AVL 트리에 비해 빠름 | RB 트리에 비해 느림 |
| 검색 성능 | AVL 트리에 비해 느림 | RB 트리에 비해 빠름 |
| 균형 잡는 방식 | RB 트리 속성을 만족시키도록 | balance factor ∈ {-1, 0, 1} 되도록 |
| 응용 사례 | linux kernel 내부에서 사용, | dictionary, 한번 만들어 놓으면 삽입/삭제가 |
| c++std::map 구현, etc... | 거의 없고 검색이 대부분인 상황에서 사용 |