home..

Red Black Tree

한 노드의 값보다 작은 값은 왼쪽에, 큰 값은 오른 쪽에 두는 이진 탐색 트리(BST)의 한 종류인 레드 블랙 트리에 대해 정리한 포스트이다.


Table of contents



기본 개념



nil 노드



red black 트리의 속성

  1. 모든 노드는 red 혹은 black
  2. 루트 노드는 무조건 black이다.
  3. 모든 nil(leaf) 노드는 black이다.
  4. red의 자녀들은 반드시 black이어야 한다. = red가 연속 레벨로 존재할 수 없다. = black은 연속 레벨로 존재할 수 있다.
  5. 임의의 노드에서 가장 끝 자손인 nil 노드까지 가는 경로들의 black 수는 같다. (자기 자신은 카운트에서 제외)
    • 노드 x의 black height : 노드 x에서 임의의 자손 nil 노드까지 내려가는 경로에서의 black 노드의 수 (5번 속성을 만족해야 성립하는 개념)
    • 5번 속성을 만족하고 있고 두 자녀가 같은 색을 가질 때 부모와 두 자녀의 색을 바꿔줘도 5번 속성은 여전히 만족한다.



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

삽입/삭제 시 주로 4번, 5번 속성을 위반하게 된다. 이들을 해결하려고 구조를 바꾸다 보면 자연스럽게 트리의 균형이 잡히게 된다.



RB 트리의 삽입

  1. 삽입 전은 RB 트리 속성을 만족한 상태이다.
  2. 삽입 방식은 일반적인 BST(이진탐색트리)와 동일하다.
  3. 삽입 후에 RB 트리 속성을 위반한 게 있는지 확인한다.
  4. RB 트리 속성을 위반했다면 재조정한다.
  5. RB 트리 속성을 다시 만족시킨다.



RB 트리의 삭제

  1. 삭제 전 RB 트리의 속성을 만족한 상태이다.
  2. 삭제 방식은 일반적인 BST와 동일하다.
  3. 삭제 후 RB 트리 속성 위반 여부를 확인한다. (삭제되는 색에 따라 확인)
  4. RB 트리 속성을 위반했다면 재조정한다.
  5. RB 트리 속성을 다시 만족시킨다.





© 2023 objectio   •  Powered by Soopr   •  Theme  Moonwalk