이 트리는 이진 탐색 트리의 일종으로, 트리의 균형을 유지하기 위해서 노드에 색상을 부여하고, 필수로 준수해야 하는 규칙을 추가한 트리다. 실제 라이브러리 코드에서 레드블랙트리를 사용하는 언어는 다음과 같다.
- C++ :
set
,map
- Java :
TreeMap
,TreeSet
- C# :
SortedSet
,SortedDictionary
Properties
다음과 같은 조건이 무조건 성립해야 한다.
- 모든 노드는
red
, 혹은black
의 속성을 가진다.root
노드는black
이다.red
노드는red
노드를 자식으로 가질 수 없다. 따라서red
노드의 자식은 무조건black
이다.- 노드 하나를 골랐을 때, 그 노드의 밑에 있는 모든
leaf
노드로 가기 위해서는 모두 같은 수의black
노드를 거쳐야 한다.- 모든
NIL
노드는black
이다.
이러한 속성을 만족한다 했을 때, root -> leaf
로 가는 경로를 보면
- 가장 짧은 길이를 이라고 하자. 이 경로는
black
노드로만 이루어져 있을 것이다. - 가장 긴 경로는 법칙 4번에 의해서
black, red, black, red . . .
의 경로를 거쳐야 하며, 이 때 black의 개수는 개이므로 전체 길이는 이다.
따라서 가장 긴 경로가 가장 짧은 경로의 2배 이상이 될 수 없어. 트리의 과한 불균형을 막을 수 있다.