[Database] 22. 트리 탐색 기법

백하림's avatar
Mar 04, 2025
[Database] 22. 트리 탐색 기법
  • 순회 방식 : 전위,중위,후위
  • 이진탐색 : 왼쪽, 오른쪽 (크기 비교)

1. 순회 방식

전위 순회(Preorder Traversal) - 루트 → 왼쪽 → 오른쪽

  • 루트를 먼저 방문한 후, 왼쪽 서브트리, 오른쪽 서브트리 순으로 방문합니다.
  • 순서: Root → Left → Right
  • 예제:
    • A / \ B C / \ \ D E F
    • 전위 순회 결과: A → B → D → E → C → F

중위 순회(Inorder Traversal) - 왼쪽 → 루트 → 오른쪽

  • 왼쪽 서브트리를 먼저 방문한 후, 루트를 방문하고, 오른쪽 서브트리를 방문합니다.
  • 순서: Left → Root → Right
  • 예제:
    • A / \ B C / \ \ D E F
    • 중위 순회 결과: D → B → E → A → C → F

후위 순회(Postorder Traversal) - 왼쪽 → 오른쪽 → 루트

  • 왼쪽 서브트리를 먼저 방문한 후, 오른쪽 서브트리를 방문하고, 마지막에 루트를 방문합니다.
  • 순서: Left → Right → Root
  • 예제:
    • A / \ B C / \ \ D E F
    • 후위 순회 결과: D → E → B → F → C → A

트리 순회 요약

순회 방식
방문 순서
전위 순회
Root → Left → Right
중위 순회
Left → Root → Right
후위 순회
Left → Right → Root

2. 이진 탐색

💡
2의 배수 (10개), (20개), (30개)
50, 30, 70, 20, 40, 60, 80 순서대로 삽입하겠습니다.

1️⃣ 50 삽입 (첫 번째 값 → 루트)

50

2️⃣ 30 삽입 (50보다 작으므로 왼쪽)

50 / 30

3️⃣ 70 삽입 (50보다 크므로 오른쪽)

50 / \ 30 70

4️⃣ 20 삽입 (30보다 작으므로 30의 왼쪽)

50 / \ 30 70 / 20

5️⃣ 40 삽입 (30보다 크므로 30의 오른쪽)

50 / \ 30 70 / \ 20 40

6️⃣ 60 삽입 (70보다 작으므로 70의 왼쪽)

50 / \ 30 70 / \ / 20 40 60

7️⃣ 80 삽입 (70보다 크므로 70의 오른쪽)

50 / \ 30 70 / \ / \ 20 40 60 80
완성된 BST 구조:
이제, 이진 탐색(Binary Search) 을 이용해서 특정 값을 찾아보겠습니다.

✅ 2. 이진 탐색(Binary Search) 예제

이진 탐색은 정렬된 데이터에서 반씩 나누며 값을 찾는 알고리즘입니다.
BST에서는 왼쪽(작은 값), 오른쪽(큰 값)으로 이동하며 탐색합니다.

🔍 예제 1: 값 40을 찾는 과정

  1. 루트(50)와 비교 → 40은 50보다 작음 → 왼쪽 이동 (30)
  1. 30과 비교 → 40은 30보다 큼 → 오른쪽 이동 (40)
  1. 40과 비교값이 일치! 탐색 성공 ✅

🔍 예제 2: 값 25를 찾는 과정

  1. 루트(50)와 비교 → 25는 50보다 작음 → 왼쪽 이동 (30)
  1. 30과 비교 → 25는 30보다 작음 → 왼쪽 이동 (20)
  1. 20과 비교 → 25는 20보다 큼 → 오른쪽 이동 (노드 없음)
  1. 더 이상 이동할 곳이 없음탐색 실패 ❌
 
Share article

harimmon