[DATA STRUCTURE] RED BLACK TREE

2022. 1. 1. 12:11·ALGORITHM & DATA STRUCTURE
728x90

Red-Black Tree 정의

이진탐색트리를 기반으로 하는 트리형식의 자료 구조이며, 동일한 노드의 개수일 대, depth를 최소화하여 시간 복잡도를 줄여주는 구조임

  • 각 노드는 Red or Black의 색깔을 가짐
  • Root node의 색깔은 Black임
  • 각 Leaf node는 Black
  • 어떤 노드의 색깔이 Red일 경우 두개의 자식 노드의 색깔은 모두 Black

Red-Black Tree 특징

  • 이진탐색트리이므로 이진탐색트리의 특징을 가짐
  • Root node 부터 Leaf node까지의 모든 경로 중 최소 경로와 최대 경로의 크기 비율은 2 보다 크지 않음 이러한 상태를 balanced 상태
  • 이진탐색트리의 삽입, 삭제 과정에서 발생하는 문제점을 해결함 
  • 노드의 child 가 없을 경우 child 를 가리키는 포인터는 NIL 값을 저장한다. 이러한 NIL들을 leaf node 로 간주

Red-Black Tree 삽입

  1. 이진탐색트리의 특성을 유지하면서 노드를 삽입 후 삽입된 노드의 색깔을 RED 로 지정
  2. Red 로 지정하는 이유는 Black-Height 변경을 최소화하기 위함
  3. 삽입 결과 이진탐색트리의 특성 위배(violation)시 노드의 색깔을 조정하고, Black-Height가 위배되었다면 rotation 을 통해 height를 조정
  4. 이러한 과정을 통해 RBT 의 동일한 height 에 존재하는 internal node 들의 Black-height 가 같아지게 되고 최소 경로와 최대 경로의 크기 비율이 2 미만으로 유지

Red-Black Tree 삭제

  1. 삭제도 삽입과 마찬가지로 이진탐색트리의 특성을 유지하면서 해당 노드를 삭제
  2. 삭제될 노드의 child 의 개수에 따라 rotation 방법이 달라짐
  3. 만약 지워진 노드의 색깔이 Black 이라면 Black-Height 가 1 감소한 경로에 black node 가 1 개 추가되도록 rotation 하고 노드의 색깔을 조정
  4. 지워진 노드의 색깔이 red 라면 Violation 이 발생하지 않으므로 RBT 가 그대로 유지

 

저작자표시

'ALGORITHM & DATA STRUCTURE' 카테고리의 다른 글

[DATA STRUCTURE] 트리  (0) 2021.11.08
[ALGORITHM] 정렬  (0) 2021.09.26
[ALGORITHM] 다익스트라 알고리즘  (0) 2021.09.23
[ALGORITHM] 순차탐색 / 이진탐색  (0) 2021.09.21
[ALGORITHM] 재귀 호출  (0) 2021.09.20
'ALGORITHM & DATA STRUCTURE' 카테고리의 다른 글
  • [DATA STRUCTURE] 트리
  • [ALGORITHM] 정렬
  • [ALGORITHM] 다익스트라 알고리즘
  • [ALGORITHM] 순차탐색 / 이진탐색
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    프로그래머스
    코틀린
    go
    IntelliJ
    ElasticSearch
    이펙티브코틀린
    java
    JPA
    splunk
    Elk
    클린코드
    자바
    AWS
    이펙티브 코틀린
    cleancode
    엘라스틱서치
    docker
    Kafka
    SQL
    Spring
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[DATA STRUCTURE] RED BLACK TREE
상단으로

티스토리툴바