[java] 레드-블랙 트리 알고리즘
레드-블랙 트리는 자가 균형 이진 검색 트리의 일종으로서, 삽입, 삭제, 검색 등의 연산을 빠르게 수행할 수 있는 알고리즘입니다. 이 알고리즘은 각 노드가 추가로 색상 정보를 가지고 있어, 트리의 균형을 조정할 수 있습니다.
레드-블랙 트리의 특징
- 루트 노드와 리프 노드(말단 노드)는 모두 검정색입니다.
- 두 개의 연속된 레드 노드는 존재할 수 없습니다.
- 어떤 노드에서부터 리프 노드까지의 경로에서 만나는 검정색 노드의 개수는 모든 경로에서 동일합니다.
- 어떤 노드의 왼쪽 서브 트리와 오른쪽 서브 트리는 모두 레드-블랙 트리여야 합니다.
레드-블랙 트리의 연산
삽입 (Insertion)
레드-블랙 트리에 노드를 삽입할 때는 다음과 같은 규칙을 따릅니다:
- 새로운 노드는 항상 레드로 삽입합니다.
- 두 개의 연속된 레드 노드가 생겨나서는 안 됩니다.
- 검정색의 부모 노드와 레드색의 자식노드, 혹은 레드색의 부모 노드와 레드색의 자식노드의 자식노드 사이의 색상 조합이 생기지 않아야 합니다.
- 삽입 후에도 트리의 모든 규칙을 만족해야 합니다.
삭제 (Deletion)
레드-블랙 트리에서 노드를 삭제할 때는 다음과 같은 규칙을 따릅니다:
- 삭제될 노드의 자식 노드를 찾아야 합니다.
- 삭제될 노드에 대한 대체 노드를 찾아야 합니다.
- 대체 노드가 삭제될 노드의 실제 위치와 다를 경우, 노드의 색상을 변경해야 합니다.
- 삭제 후에도 트리의 모든 규칙을 만족해야 합니다.
자바에서의 구현
레드-블랙 트리는 자바에서 쉽게 구현할 수 있습니다. 예를 들어, java.util.TreeMap
클래스는 레드-블랙 트리를 기반으로한 구조로 구현되어 있습니다. 이를 활용하면 레드-블랙 트리의 특성을 활용한 데이터 구조를 만들 수 있습니다.
아래는 TreeMap의 예시 코드입니다.
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
// TreeMap 객체 생성
TreeMap<Integer, String> treeMap = new TreeMap<>();
// 데이터 추가
treeMap.put(1, "One");
treeMap.put(2, "Two");
treeMap.put(3, "Three");
// 데이터 출력
System.out.println(treeMap);
}
}