CS 스터디
[자료구조] 이진 탐색 트리(Binary Search Tree)
수방방
2024. 9. 7. 23:37
📍 이진 탐색 트리란?
- 이진 탐색 트리는 이진 트리의 일종으로, 탐색에 최적화된 트리 구조입니다.
- 이진 트리란 각 노드가 최대 두개의 자식을 가질 수 있는 트리 구조를 말합니다.
💡 이진 탐색 트리의 주요 특징
- 왼쪽 서브트리의 모든 값은 부모 노드의 값보다 작아야 한다.
- 오른쪽 서브트리의 모든 값은 부모 노드의 값보다 커야 한다.
- 각각의 서브트리 또한 이진 탐색 트리의 속성을 만족한다.
- 이 규칙을 통해 이진 탐색 트리는 데이터를 정렬된 형태로 유지하며 탐색, 삽입, 삭제와 같은 연산을 효율적으로 수행할 수 있습니다.
📍 이진 탐색 트리의 연산
- 탐색 (Search) : O(log n) (평균), O(n) (최악)
- 원하는 값을 찾을 때, 루트 노드에서 시작하여 현재 노드와 비교하면서 왼쪽 또는 오른쪽으로 이동하며 탐색합니다.
- 트리의 균형이 잘 잡혀있는 경우, O(log n) 의 시간복잡도를 가집니다.
- 검색 값이 없으면 null을 반환합니다.
- 삽입 (Insertion) : O(log n) (평균), O(n) (최악)
- 새로운 값을 삽입할 때, 해당 값이 현재 노드보다 크거나 작은지를 비교하면서 적절한 자식 노드 위치에 삽입합니다.
- 삭제 (Deletion) : O(log n) (평균), O(n) (최악)
- 삭제할 때도 탐색을 통해 노드를 찾고, 삭제할 노드의 자식 노드가 있는 경우 그 구조를 재배치해야 합니다.
📍 이진 탐색 트리 생성 예시
8, 3, 10, 1, 6, 14, 4, 7, 13
- 값 8 삽입
- 트리가 비어 있으므로 첫번째 값인 8을 루트 노드로 삽입
- 값 3 삽입
- 3은 8보다 작으므로, 8의 왼쪽 자식으로 삽입
- 값 10 삽입
- 10은 8보다 크므로, 8의 오른쪽 자식으로 삽입
- 값 1 삽입
- 1은 8보다 작고, 3보다도 작으므로, 3의 왼쪽 자식으로 삽입
- 값 6 삽입
- 6은 8보다 작고, 3보다 크므로, 3의 오른쪽 자식으로 삽입
- 값 14 삽입
- 14는 8보다 크고, 10보다 크므로, 10의 오른쪽 자식으로 삽입
- 값 4 삽입
- 4는 8보다 작고, 3보다 크고, 6보다 작으므로, 6의 왼쪽 자식으로 삽입
- 값 7 삽입
- 7은 8보다 작고, 3보다 크고, 6보다 크므로, 6의 오른쪽 자식으로 삽입
- 값 13 삽입
- 13은 8보다 크고, 10보다 크고, 14보다 작으므로, 14의 왼쪽 자식으로 삽입
- 최종 이진 탐색 트리
8
/ \
3 10
/ \ \
1 6 14
/ \ /
4 7 13