Odds and Ends
[자료구조] Red-Black Tree 개념 본문
자가 균형 이진 탐색 트리, Red-Black Tree
Red-Black Tree 조건
1. 모든 노드는 빨간색 혹은 검은색이다.
2. 루트 노드는 검은색이다.
3. 모든 리프 노드(NIL)들은 검은색이다. (NIL : null leaf, 자료를 갖지 않고 트리의 끝을 나타내는 노드)
4. 빨간색 노드의 자식은 검은색이다. > No Double Red(빨간색 노드가 연속으로 나올 수 없다)
5. 모든 리프 노드에서 Black Depth는 같다. > 리프노드에서 루트 노드까지 가는 경로에서 만나는 검은색 노드의 개수가 같다.
레드-블랙 트리에 새로운 노드를 삽입할 때 새로운 노드는 항상 빨간색으로 삽입한다.
이렇게 되면 4번 조건이 위배되는 상황이 발생한다. 즉, 빨간색 노드가 연속으로 2번 나타날 수 있다(Double Red)
Double Red가 발생했을 때
- 삼촌 노드가 검은색이라면 -> Restructuring을 수행하면 된다.
- 삼촌 노드가 빨간색이라면 -> Recoloring을 수행하면 된다.
* 삼촌 노드 : 부모의 형제 노드
Restructuring
1. 새로운 노드(N), 부모 노드(P), 조상 노드(G)를 오름차순으로 정렬한다.
2. 셋 중 중간값을 부모로 만들고 나머지 둘을 자식으로 만든다.
3. 새로 부모가 된 노드를 검은색으로 만들고 나머지 자식들을 빨간색으로 만든다.
Recoloring
1. 새로운 노드(N)의 부모(P)와 삼촌(U)을 검은색으로 바꾸고 조상(G)을 빨간색으로 바꾼다.
1-1. 조상(G)이 루트 노드라면 검은색으로 바꾼다.
1-2. 조상(G)을 빨간색으로 바꿨을 때 또다시 Double Red가 발생한다면 또다시 Restructuring 혹은 Recoloring을 진행해서 Double Red 문제가 발생하지 않을 때까지 반복한다.
728x90
'CS 개념 정리' 카테고리의 다른 글
[CS 개념 정리] 시간/공간 복잡도, 완전탐색, 순열/조합/부분집합 (0) | 2022.10.10 |
---|---|
[자료구조] 트라이(Trie) 개념 정리 (0) | 2022.10.09 |
[자료구조] AVL Tree 개념 (0) | 2022.10.09 |
[CS 면접 대비] DFS/BFS 개념 & 파이썬 코드 정리 (0) | 2022.10.09 |
[CS 면접 대비] 자료구조/알고리즘 비선형 자료구조(Graph, Tree, Binary Tree, Full Binary Tree, Complete Binary Tree,Binary Search Tree) 개념 & 질문 정리 (0) | 2022.10.06 |