Reference : Introduction to Algorithms
The root is black
이진 탐색 트리(Binary Search Tree)의 한 종류
<aside> 💡 이진 탐색 트리(Binary Search Tree, BST)
이진 탐색 트리의 속성
이진 탐색 트리의 연산
</aside>
스스로 균형(balancing) 잡는 트리
BST의 worst case의 단점 개선
Every leaf (NIL) is black.
If a node is red, then both its children are black.
(= red가 연속적으로 존재할 수 없다)
For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.
→ 각 노드에서 leaf node 까지 가는 경로의 black node의 수는 항상 같아야 한다. (자기 자신 제외)
<aside> 💡 NIL Node
</aside>
삽입/삭제 시 주로 property #4, #5를 위반하며, 위반 사항들을 해결하고자 트리의 구조를 바꾸다 보면 트리가 균형을 이루게 됨
#4 : 노드가 red라면 자식은 black
#5 : 각 노드에서 leaf node에 도달하는 경로의 black node 수는 항상 같아야 함
Time Complexity of Search-tree operation (TREE-INSERT, TREE-DELETE) : $O(log\ n)$
$\because$ Modified tree may violate the red-black properties
to restore RB properties, colors and pointers within node need to change
→ The pointer structure changes through rotation
Left-Rotate(T, x)
y = x.right
x.right = y.left
if y.left != T.nil
y.left.p = x
y.p = x.p
if x.p == T.nil
T.root = y
else if x == x.p.left
x.p.left = y
else
x.p.right = y
y.left = x
x.p = y
Right-Rotate(T, y)
x = y.left
y.left = x.right
if x.right != T.nil
x.right.p = y
x.p = y.p
if y.p == T.nil
t.root = x
else if y == y.p.left
y.p.left = x
else
y.p.right = x
x.right = y
y.p = x