목차

RB Tree 이론

이진 검색 트리(BST)와 균형 탐색 트리

RB Tree 구현

Sentinel Node와 T.nil

코어 기능

Rotate

Insert와 Delete 시, RBT의 기본 속성을 위반하는 상황이 생긴다. 이를 수정하기 위해 일부 노드의 색깔과 포인터를 변경한다. 이 때 포인터를 변경하기 위해 Rotate를 사용한다.

Insert → O(logN)

RedBlack Tree에 대해

<aside> 💡 1. 새 노드 z를 삽입한다. → O(logN) : 이진탐색(트리의 높이) 2. 새 노드 z를 RED로 칠한다. → O(1) 3. 삽입한 후에 RBT의 규칙에 어긋난다면 insert_fixup()을 실행한다.

</aside>

Insert_fixup → O(1)

<aside> 💡 위반된 RBT 규칙을 바로잡는다.

</aside>

Transplant(T, u, v) → O(1)

Deletion(T, p) → O(logN), fixup 없이도 O(logN)

https://github.com/Roha-Lee/rbtree-lab

<aside> 💡 p : 지워질 노드 y : 지워질 노드(case1,2), 대체할 노드(case3) x : y의 자리를 대체할 노드

</aside>

지워지거나 삭제될 노드 y의 색깔을 미리 저장해 둔다. 만약 지워진 노드 y의 색이 Black일 때 문제가 되므로, fixed 함수를 호출해 문제를 해결한다.

Deletion은 크게 3가지 경우로 나누어 해결할 수 있다.

Delete_fixup(T, x) → O(logN)

<aside> 💡 Delete하며 바뀌거나 삭제된 노드의 색이 BLACK이라면, RBT 규칙 5번에 위반된다. 이를 해결하기 위해, 빈 공간을 대체한 노드 x에 가상의 BLACK을 하나 더 추가한다. 즉, 함수가 시작될 때 x는 여분의 B를 하나 더 들고 있다.

</aside>

<aside> 💡

  1. 대체된 노드 x의 색깔이 RED일 때
  2. 대체된 노드 xroot일 때
  3. 대체된 노드 x의 색깔이 BLACK일 때 논외. 삭제된 노드 y의 색깔이 RED일 때

</aside>

<aside> 💡 대체된 노드 x의 색깔이 BLACK일 때, 4가지의 케이스가 있다.

Case 1 : x의 형제 노드 w가 RED → O(1) Case 2 : x의 형제 노드 w가 BLACK, w의 왼쪽, 오른쪽 자식이 모두 BLACK → O(logN), while문이 실행되는 경우가 이 부분. Case 3 : x의 형제 노드 w가 BLACK, w의 왼쪽 자식 RED, 오른쪽 자식 BLACK → O(1) Case 4 : x의 형제 노드 w가 BLACK, w의 오른쪽 자식 RED → O(1)

</aside>

기타