Reference : Introduction to Algorithms

  1. The root is black

    https://walkccc.me/CLRS/img/13.1-1-3.png

    Red-Black properties

    1. Every node is either Red or Black
  2. Every leaf (NIL) is black.

  3. If a node is red, then both its children are black.

    (= red가 연속적으로 존재할 수 없다)

  4. 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>

Balancing : RB 트리는 어떻게 균형을 잡는가?

삽입/삭제 시 주로 property #4, #5를 위반하며, 위반 사항들을 해결하고자 트리의 구조를 바꾸다 보면 트리가 균형을 이루게 됨

#4 : 노드가 red라면 자식은 black

#5 : 각 노드에서 leaf node에 도달하는 경로의 black node 수는 항상 같아야 함

RB Tree - Rotations

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

Untitled

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