Red Black Tree는 RBT라고도 불린다. RBT는 BST(Binary Search Tree)를 기반으로하는 트리 형식의 자료구조이다. BST의 삽입, 삭제 연산 과정에서 발생할 수 있는 문제점을 해결하기 위해 등장하였다.
RBT의 삽입, 삭제, 검색 연산은 모두 O(log n)의 시간 복잡도가 소요된다. 동일한 노드의 개수일 때 트리의 깊이를 최소화하여 시간 복잡돌르 줄이는 것이 RBT의 핵심적인 부분이다. 동일한 노드의 개수일 때 깊이가 최소가 되려면 Complete Binary Tree의 형태를 띄어야 한다.
Red Black Tree는 다음을 만족하는 Binary Search Tree이다.
BST의 특징을 유지하며 노드를 삽입한다. 삽입된 노드는 Black Height를 최소화 하기 위해 Red Node로 지정한다. 삽입 결과 RBT의 특성이 위배될 경우 삽입된 노드를 Black Node로 지정하고, Black Height가 위배되면 Rotation을 통해 Height를 조정한다. 이러한 과정을 통해 RBT의 동일한 Height에 존재하는 내부 노드들의 Black Height가 같아지게 되고 이로 인해 balanced 상태가 만들어지고 최소 경로와 최대 경로 간의 비가 2를 넘지 않는다.
삭제도 삽입과 마찬가지로 BST의 특징을 유지하며 노드를 삭제한다. 석제될 노드의 자식 노드 개수에 따라 Rotation 방법이 달라진다. 만약 지워진 노드가 Black Node였다면 Black Height가 1 감소한 경로에 Black Node가 1개 추가되도록 Rotation하고 노드의 색을 조정한다. 지워진 노드가 Red Node라면 Violation이 발생하지 않으므로 RBT가 유지된다.
** Java Collection에서 ArrayList도 내부적으로 RBT로 이뤄져있고, HashMap에서의 Separate Chaining에서도 사용된다. 그만큼 효율이 좋고 중요한 자료구조이다.