본문 바로가기
알고리즘

레드블랙트리

by 근즈리얼 2021. 5. 12.
728x90

레드-블랙트리

 

- 이진탐색트리의 일종

- 균형잡힌 트리 : 높이가 o(logn)

- search, insert, delete연산을 최악의 경우에도 o(logn)시간에 지원

 

- 각 노드는 하나의 키, 왼쪽 자식, 오른쪽 자식, 부모노드의 주소를 저장

- 자식노드가 존재하지 않을 경우 NIL노드라고 부르는 특수한 노드가 있다고 가정

- 결국 모든 리프노드는 NIL노드

- 루트의 부모도 NIL노드라고 가정

- 노드들은 내부노드와 NIL노드로 분류

* 실제로 구현할 때 NIL노드를 구현하지는 않음

 

레드-블랙 트리 -> 기본적으로는 이진탐색트리

1. 각 노드는 red 혹은 black

2. 루트노드는 black

3. 모든 리프노드는 black

4. red노드의 자식노드들은 전부 black -> red노드는 연속되어 등장 x : 가장 중요

5. 모든 노드에 대해서 그 노드로부터 자손인 리프노드에 이르는 모든 경로에는 동일한 개수의 black 노드가 존재한다.

레드-블랙 예시

특징

1. 노드 x의 높이 h(x)는 자신으로부터 리프노드까지의 가장 긴 경로에 포함된 에지의 개수이다.

2. 노드 x의 블랙-높이 bh(x)는 x로부터 리프노드까지의 경로상의 블랙노드의 개수이다.

 

==> 높이가 h인 노드의 블랙-높이는 bh>=h/2이다

- 조건 4에 의해 레드노드는 연속될 수 없으므로 당연

 

==> 노드 x를 루트로드로 하는 임의의 부트리는 적어도 2^bh(2)-1개의 내부노드를 포함한다.

==>n개의 내부노드를 가지는 레드블랙트리의 높이는 2log(n+1)이하이다.

 

search

- 이진탐색트리랑 같음

 

Left and Right Rotation

- 시간복잡도 o(1)

- 이진탐색트리의 특성을 유지

 

 

728x90

'알고리즘' 카테고리의 다른 글

[cs 스터디] 운영체제 후기  (0) 2024.02.15
멱집합  (0) 2021.05.05
순환의 응용 : n queens problem  (0) 2021.05.05
순환의 응용 - 미로찾기  (0) 2021.05.05
[백준 1654] 랜선 자르기 [java]  (0) 2021.05.04

댓글