
이진탐색트리의 일종이다 트리의 높이를 제한해서
최악의 경우에도 탐색/삽입/삭제가 O(log n)이 되도록 만든 구조
#4 속성: red의 자녀들은 반드시 black이어야 한다. (즉, red가 연속적으로 존재할 수 없다.)
#5 속성: 임의의 노드에서 자손 nil 노드들까지 가는 경로들의 black 수는 같다. (자기 자신은 카운트에서 제외)
삽입/삭제 시 주로 속성 #4, #5를 위반하며 이들을 해결하기 위해 구조를 바꾼다.
그러다 보면 자연스럽게 트리의 균형이 잡히게 된다.
이렇게 균형을 잡으며 편향되지 않는다.
검색 : O(log n)
삽입 : O(log n)
삭제 : O(log n)
균등 트리 : 노드 개수가 N개일 때 O(log n)
편향 트리 : 노드 개수가 N개일 때 O(N)
이진 탐색 트리는 최악의 경우 한쪽으로 편향된 트리일 때 O(N) 시간이 걸린다.
이 말은 모든 노드를 한 번씩 다 확인해줘야 한다는 의미이다.
이러한 단점을 개선한것이 RBT
삽입/삭제가 거의 없고 검색이 대부분인 상황에서는 AVL트리를 사용하고
삽입/삭제가 많을 때는 red-black tree를 사용하면 좋다.
왜냐하면 AVL트리는 검색 성능이 빠르고 red-black tree는 삽입/삭제 성능이 좋기 때문!
AVL트리는 균형을 좀 더 엄격하게 잡는다.
엄격하니깐 검색 성능은 더 좋지만 삽입/삭제는 red-black tree에 비해 느리다.