
이진 트리의 특수한 형태로, 이진 탐색이 효율적으로 동작할 수 있도록 고안된 자료구조의 일종. 정렬된 이진 트리
- 루트 노드부터 방문 하여 탐색을 진행
- 검색 값이 루트보다 작으면 왼쪽으로, 크다면 오른쪽을 방문
- 일치하는 값을 찾을때까지 절차 반복
- 검색 값이 없으면 null 반환

50, 15, 62, 80, 7, 54, 11 의 요소로 이진트리를 생성한다고 했을때 과정은 다음과 같다.
1. 50을 트리의 루트에 삽입한다.
2. 다음 요소를 읽고 루트 노드 요소보다 작으면 왼쪽 하위 트리의 루트로 삽입
3. 루트 노드의 요소보다 크면 오른쪽 하위 트리의 루트로 삽입

- 루트에서 시작
- 삽입 값을 루트와 비교하여 루트보다 작으면 왼쪽, 크다면 오른쪽
- 리프 노드에 도달 한 후, 노드보다 크면 오른쪽, 작다면 왼쪽에 삽입

바로 삭제

노드를 삭제하고 자식 노드를 삭제된 노드의 부모에 직접 연결

자식이 둘 있는 경우 successor 노드를 찾는 과정이 추가된다.
successor 노드란 오른쪽 서브트리의 최소값을 말한다.
1. 삭제할 노드를 찾는다.
2. 삭제할 노드의 successor 노드를 찾는다
3. 삭제할 노드와 successor 노드의 값을 바꾼다
4. 노드를 삭제한다.

BST는 한쪽으로 치우치면 성능이 O(n)이라는 단점이 있는데, 이런 단점을 해결하기 위해 나온 균형 이진 탐색 트리 중 대표적인 트리로 AVL 트리와 레드-블랙 트리(RBT)가 있다. 이것도 같이 알아보자.


👉 위 다섯가지 규칙을 만족하는 트리가 레드-블랙 트리이다.
| 구분 | AVL 트리 🌲 | 레드-블랙 트리 ⚫🔴 |
|---|---|---|
| 균형 유지 | 엄격 (높이 차 ≤ 1) | 느슨 (경로별 Black 수 유지) |
| 탐색 속도 | 빠름 (더 균형적) | 보통 (조금 덜 균형) |
| 삽입/삭제 | 느림 (회전 많음) | 빠름 (회전 적음) |
| 활용 예시 | 데이터베이스 인덱스 | 언어 라이브러리, 커널 코드 |
AVL 트리: 탐색 위주 → 항상 엄격하게 균형 유지
RBT: 삽입/삭제 많은 경우 → 유지 비용 최소화
[참고] AVL과 RBT 모두 O(log n)를 보장하지만, AVL은 더 엄격한 균형으로 탐색이 빠른 대신 삽입/삭제 유지비용이 크고, RBT는 느슨한 균형으로 삽입/삭제가 평균적으로 더 안정적이다!