이진 탐색 트리
IT 위키
이진 탐색 트리(Binary Search Tree, BST)는 이진 트리의 한 유형으로, 모든 노드가 다음과 같은 이진 탐색 속성을 만족하는 트리 구조이다.
- 왼쪽 서브트리의 모든 노드는 부모 노드보다 작다.
- 오른쪽 서브트리의 모든 노드는 부모 노드보다 크다.
- 각 서브트리 또한 이진 탐색 트리이다.
이진 탐색 트리는 탐색, 삽입, 삭제 연산을 평균적으로 O(log N)에 수행할 수 있어, 정렬된 데이터를 효율적으로 관리하는 데 사용된다.
1 특징[편집 | 원본 편집]
- 각 노드의 최대 자식 노드 수는 2개이다.
- 중복된 값은 허용되지 않는 경우가 일반적이다.
- 정렬된 데이터를 효과적으로 탐색할 수 있다.
- 트리의 균형 상태에 따라 성능이 결정된다.
- 균형 잡힌 경우: O(log N)
- 편향된 경우: O(N) (한쪽으로 치우친 리스트 형태)
2 기본 연산[편집 | 원본 편집]
이진 탐색 트리는 다음과 같은 연산을 수행할 수 있다.
2.1 탐색(Search)[편집 | 원본 편집]
- 루트에서 시작하여 원하는 값을 찾을 때까지 왼쪽 또는 오른쪽으로 이동.
- 찾고자 하는 값이 현재 노드보다 작으면 왼쪽, 크면 오른쪽으로 이동.
2.2 삽입(Insertion)[편집 | 원본 편집]
- 새로운 노드를 추가할 위치를 찾은 후, 적절한 위치에 삽입.
2.3 삭제(Deletion)[편집 | 원본 편집]
삭제할 노드의 경우에 따라 다르게 처리됨:
- 자식이 없는 노드 → 단순히 제거.
- 자식이 하나인 노드 → 부모 노드와 직접 연결.
- 자식이 두 개인 노드 → 오른쪽 서브트리에서 가장 작은 값(후계자)을 찾아 대체.
3 예제[편집 | 원본 편집]
다음과 같은 BST를 고려하자.
8 / \ 3 10 / \ \ 1 6 14 / \ / 4 7 13
- 탐색(6) → 8에서 왼쪽(3), 다시 오른쪽(6)으로 이동하여 찾음.
- 삽입(5) → 6의 왼쪽(4)에서 오른쪽(5)에 추가.
- 삭제(3) → 후계자(4)로 대체.
4 코드 예제[편집 | 원본 편집]
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class BST:
def __init__(self):
self.root = None
def insert(self, value):
if not self.root:
self.root = Node(value)
return
self._insert(self.root, value)
def _insert(self, node, value):
if value < node.value:
if node.left:
self._insert(node.left, value)
else:
node.left = Node(value)
else:
if node.right:
self._insert(node.right, value)
else:
node.right = Node(value)
def search(self, value):
return self._search(self.root, value)
def _search(self, node, value):
if not node or node.value == value:
return node
if value < node.value:
return self._search(node.left, value)
return self._search(node.right, value)
# 예제 실행
bst = BST()
for num in [8, 3, 10, 1, 6, 14, 4, 7, 13]:
bst.insert(num)
print(bst.search(6).value) # 출력: 6
출력 결과 예시: 6
5 응용[편집 | 원본 편집]
이진 탐색 트리는 다양한 분야에서 활용된다.
- 데이터베이스 → 인덱싱 구조
- 운영체제 → 메모리 관리, 파일 시스템
- 네트워크 → 라우팅 테이블 최적화
- 인공지능 → 의사결정 트리(Decision Tree)
6 같이 보기[편집 | 원본 편집]
7 참고 문헌[편집 | 원본 편집]
- Cormen, Thomas H., et al. "Introduction to Algorithms." MIT Press, 2009.
- Knuth, Donald E. "The Art of Computer Programming, Volume 3: Sorting and Searching." Addison-Wesley, 1998.