BST 불변식

BST 범위 계약 유지

BST 삽입, 탐색, 삭제는 모두 같은 불변식에서 출발합니다. 각 노드는 허용된 값의 범위를 갖고, 삭제에서는 successor나 predecessor를 옮긴 뒤에도 그 범위 계약이 깨지지 않아야 합니다.

01

비교 정책 결정

중복 값을 허용할지, 같으면 왼쪽/오른쪽 어디에 둘지 먼저 정합니다.

duplicate
02

탐색 범위를 줄인다

현재 값보다 작으면 왼쪽, 크면 오른쪽으로 이동해 절반의 후보를 버립니다.

search
03

삭제 케이스 분류

자식 0개, 1개, 2개일 때 처리가 다르며 2개는 successor/predecessor 교체가 필요합니다.

delete
04

균형 문제 인식

정렬된 입력으로 삽입하면 높이가 N이 되어 BST가 linked list처럼 느려집니다.

height
중복
정책 없이는 탐색과 삭제가 모호 카운트 필드를 두거나 한쪽 subtree로 보내는 규칙을 고정합니다.
policy
삭제
대체 노드가 subtree 범위를 지켜야 함 오른쪽 subtree의 최소값이나 왼쪽 subtree의 최대값을 주로 씁니다.
replace
편향
높이가 성능을 결정 평균 O(log N) 기대와 최악 O(N)을 구분해야 합니다.
complexity

범위 검증 · 루트 삭제 · 균형 대안 점검

범위 검증 부모와만 비교하지 말고 조상에게서 내려온 min/max 범위를 확인합니다.
루트 삭제 삭제 대상이 root일 때 새 root 연결을 따로 점검합니다.
균형 대안 최악 높이가 문제라면 AVL, Red-Black Tree, Treap 같은 균형 구조를 검토합니다.