woowacourse-study / talteco

"조조그린"의 면접 스터디
3 stars 0 forks source link

AVL 트리와 Red Black 트리란? #102

Open bugoverdose opened 2 years ago

bugoverdose commented 2 years ago

AVL 트리

노드의 balance factor

balance factor: 특정 노드(x)의 좌우 서브트리의 높이 차이

BF(x) = h(lSubtree(x)) - h(rSubtree(x))

핵심 특징

image

AVL 트리의 균형 잡기

  1. 삽입 혹은 삭제 작업을 수행한 직후, 삽입/삭제가 발생한 위치에서 루트노드로 거꾸로 올라오면서 BF 값을 계산.
  2. 만일 BF 값이 {-1, 0, 1}이 아닌 노드가 생겨났다면 균형을 맞추는 재조정 작업을 수행

트리 일부를 왼쪽/오른쪽으로 회전(rotate)시킴으로써 높이차 재조정

image image

장점

최악의 경우에도 삽입/삭제/검색의 시간복잡도는 O(log N)이 된다!

균형을 엄격하게 잡기 때문에 검색 성능은 RB 트리에 비해 미세하게 더 빠르다

단점


레드 블랙 트리 (RB 트리)

구조

image

핵심 성질

  1. 모든 노드는 red 혹은 black
  2. 루트노드는 black
  3. 모든 nil 노드(리프노드)는 black
  4. red의 자녀들은 black. 즉, red는 연속적으로 존재 불가
  5. 임의의 노드에서 자손 nil 노드들까지 가는 경로들의 black 개수는 같다. (자기 자신은 카운트에서 제외) => 이 동일한 개수가 노드의 black height
    • 실질적으로 균형을 맞추는 원칙
    • 5번 성질을 충족하고 있을 때, 두 자녀가 같은 색을 지니고 있다면 부모와 자녀의 색을 바꿔줘도 5번 성질은 여전히 충족된다.
image

nil 노드

삭제 후 대체된 위치에 nil 노드가 오는 경우, extra black을 배정하여 doubly black으로 만들어 재조정 작업을 거치기 위함.

노드의 black height

노드 x에서 임의의 자손 nil 노드까지 내려가는 경로에서의 black의 개수


균형 재조정 원리

삽입/삭제시, RB 트리 위배 여부를 확인하고, RB 트리의 속성을 위반한 경우, 재조정 과정 진행.

구체적으로는 4번 성질 & 5번 성질에 위배되는 구조를 해결하기 위해 개별 노드의 색상 및 전체적인 구조를 변경하는 과정에서 트리의 균형을 어느 정도 잡을 수 있음.

삽입 과정

핵심: 새롭게 삽입되는 노드는 언제나 red

삽입 후 재조정

삽입 후 red가 연속되어 4번 성질에 위배되더라도 무조건 좌우 균형이 깨진 것은 아님.

색상 변경만이 아니라, AVL 트리처럼 문제가 생긴 부분을 순차적으로 회전시켜서 해결.

부분적/전체적으로 회전시키는 과정에서 트리의 전체적인 depth, level을 줄여나갈 수 있음.

  1. BST 특징(대소 관계)도 유지하면서 균형을 재조정하기 위해 회전시킴.
  2. red와 black 색상을 적절하게 조정하여 RB 트리의 성질 충족시킴.
image

삭제 과정

삭제 전 RB 트리 조건 충족하는 상태에서, 일반적인 BST 방식으로 삭제 후, RB 트리 위배 여부를 확인하여 재조정 과정 거침.

삭제 후 RB 트리 성질 위반 여부 확인

핵심: 실질적으로 삭제되는 색이 무엇인가에 따라 RB 트리의 성질 위배 여부 확인 가능.

  1. 삭제되는 색이 red라면 RB 트리의 조건에 위배되지 않음. (사라진 자리에 후임자가 대체되든, 부모와 자식 모두 black이든) red는 여전히 연속되지 않으며, black height는 불변.

  2. 삭제되는 색이 black인 경우 RB 트리 조건에 위배될 수도 있음. 즉, 루트노드(black)가 삭제되었거나, 특정 서브트리의 black height가 변경되거나, red끼리 연속될 수 있음.

삭제 후 재조정

2번 성질 위배시 재조정: 루트 노드가 삭제된 경우, 새로운 루트노드의 색상만 black으로 수정해주기만 하면 됨.

5번 성질 위배시 재조정: 삭제된 색의 위치를 대체한 노드extra black을 부여하고, 이로 인해 생겨난 doubly black 혹은 red-and-black의 extra black를 제거하는 방식으로 해결

시간복잡도

장점

단점

검색 성능은 AVL 트리에 비해 약간 느리다. 균형이 덜 잡히기 때문.

tonic523 commented 2 years ago