반응형

이진 탐색 트리 (Binary Search Tree)란?

이진 탐색 트리(Binary Search Tree, 이하 BST)는 각 노드가 최대 두 개의 자식 노드를 가지는 이진 트리(Binary Tree)의 일종으로, 특정 조건을 만족하는 트리 구조입니다. 이 조건 덕분에 BST는 데이터 검색, 삽입, 삭제 등의 연산을 효율적으로 수행할 수 있습니다.


BST의 특징

  1. 노드의 구조:
    • 각 노드는 키(key)와 데이터를 포함하며, 두 개의 자식 노드를 가질 수 있습니다. (왼쪽 자식 노드와 오른쪽 자식 노드)
  2. 값의 정렬 조건:
    • 왼쪽 서브트리의 모든 노드 값은 부모 노드 값보다 작습니다.
    • 오른쪽 서브트리의 모든 노드 값은 부모 노드 값보다 큽니다.
    • 이 규칙은 모든 노드에 대해 재귀적으로 적용됩니다.
  3. 중복값 허용 여부:
    • 대부분의 구현에서는 중복 값을 허용하지 않지만, 중복 값을 허용하는 변형도 존재합니다.
  4. 탐색 효율성:
    • 평균적으로 탐색, 삽입, 삭제 연산이 O(log n)의 시간 복잡도를 가지지만, 트리가 균형을 이루지 못하면 최악의 경우 O(n)이 될 수 있습니다.

BST의 동작 원리

BST의 주요 연산은 탐색, 삽입, 삭제로 나눌 수 있으며, 각 연산은 재귀적 또는 반복적으로 수행됩니다. 아래에서는 숫자를 이용해 각 연산의 과정을 구체적으로 설명하겠습니다.

1. 삽입 연산

새로운 값을 삽입할 때는 BST의 조건을 유지하며 노드를 추가합니다.

  • 예시: 50, 30, 70, 20, 40, 60, 80 순서로 삽입
  1. 50 삽입: 트리가 비어 있으므로 루트 노드로 설정.
  2. 30 삽입: 30 < 50, 왼쪽 자식 노드로 삽입.
  3. 70 삽입: 70 > 50, 오른쪽 자식 노드로 삽입.
  4. 20 삽입: 20 < 50 (왼쪽으로 이동), 20 < 30, 30의 왼쪽 자식 노드로 삽입.
  5. 40 삽입: 40 < 50 (왼쪽으로 이동), 40 > 30, 30의 오른쪽 자식 노드로 삽입.
  6. 60 삽입: 60 > 50 (오른쪽으로 이동), 60 < 70, 70의 왼쪽 자식 노드로 삽입.
  7. 80 삽입: 80 > 50 (오른쪽으로 이동), 80 > 70, 70의 오른쪽 자식 노드로 삽입.

결과 트리 구조:

     50
    / \
   30 70
  / \ / \
20 40 60 80

2. 탐색 연산

특정 값을 찾기 위해 트리를 탐색합니다. 현재 노드의 값과 찾고자 하는 값을 비교하며 이동합니다.

  • 예시: 40을 탐색
  1. 루트(50)에서 시작. 40 < 50, 왼쪽으로 이동.
  2. 30에서 탐색. 40 > 30, 오른쪽으로 이동.
  3. 40에서 탐색 종료. 값을 찾음.

3. 삭제 연산

노드를 삭제할 때도 BST의 조건을 유지해야 하며, 삭제할 노드의 자식 노드 수에 따라 세 가지 경우로 나뉩니다:

  1. 자식이 없는 노드 삭제: 단순히 노드를 제거.
    • 예: 20 삭제
  2. 자식이 하나인 노드 삭제: 부모 노드가 삭제할 노드의 자식을 대신 참조하도록 함.
    • 예: 40 삭제 (40의 부모인 30이 40의 자식 노드를 참조)
  3. 자식이 두 개인 노드 삭제: 삭제할 노드의 오른쪽 서브트리에서 가장 작은 값을 가진 노드(또는 왼쪽 서브트리에서 가장 큰 값)를 찾아 교체.
    • 예: 50 삭제
      • 오른쪽 서브트리(70, 60, 80)에서 가장 작은 값인 60으로 교체.
      • 60을 삭제한 후 트리를 정리.

결과 트리 구조:

 
60
/ \
30 70
/ \
20 80

BST의 장점과 단점

장점:

  • 데이터 탐색, 삽입, 삭제가 평균적으로 빠름(O(log n)).
  • 데이터가 정렬된 상태로 저장되어 있어 순회(traversal)를 통해 정렬 데이터를 쉽게 얻을 수 있음.

단점:

  • 트리가 편향될 경우(예: 삽입 순서가 정렬된 데이터일 경우), 시간 복잡도가 O(n)으로 감소.
  • 균형을 유지하기 위한 추가적인 로직(Red-Black Tree, AVL Tree 등)이 필요할 수 있음.

마무리

이진 탐색 트리는 데이터를 효율적으로 관리하고 검색하는 데 유용한 자료구조입니다. 그러나 성능을 유지하기 위해 트리의 균형을 고려해야 하며, 경우에 따라 AVL 트리나 레드-블랙 트리와 같은 균형 트리를 사용하는 것이 더 적합할 수 있습니다. BST를 올바르게 이해하고 사용하면 다양한 문제를 효과적으로 해결할 수 있습니다.

뭔가 쓰는 중…

반응형

'개발 부트캠프 > SW공학' 카테고리의 다른 글

[자료구조] Heap 트리  (0) 2025.01.17
[자료구조] AVL 트리  (0) 2025.01.17
[자료구조] Tree  (0) 2025.01.17
[시스템 아키텍처] HA 실습  (0) 2024.11.26

+ Recent posts