자료구조&알고리즘/C++
🚀 트리 순회(Tree Traversal) 방법 : 후위, 전위, 중위, 레벨
geminanolja
2025. 3. 2. 15:31
🌳 트리(Tree)란?
"나무처럼 생긴 자료 구조!"
부모 노드와 자식 노드가 있는 계층적인 구조!
예제 트리
A
/ \
B C
/ \ \
D E F
- A: 루트 노드 (Root)
- B, C: A의 자식 노드 (Child)
- D, E, F: 리프 노드 (Leaf, 마지막 노드)
🔹 트리 순회의 종류 (4가지)
트리에서 모든 노드를 방문하는 방법에는 4가지가 있어!
✅ 전위순회(Preorder)
✅ 중위순회(Inorder)
✅ 후위순회(Postorder)
✅ 레벨순회(Level-order)
1️⃣ 전위 순회 (Preorder)
"부모 → 왼쪽 → 오른쪽"
Root → Left → Right
✅ 방문 순서:
A → B → D → E → C → F
✅ 설명:
- A를 먼저 방문!
- B를 방문한 후, B의 자식들(D, E) 방문
- C를 방문한 후, C의 자식(F) 방문
🎯 재귀 코드
void Preorder(Node* root)
{
if (root == nullptr) return;
cout << root->data << " "; // 1️⃣ 부모 방문
Preorder(root->left); // 2️⃣ 왼쪽 방문
Preorder(root->right); // 3️⃣ 오른쪽 방문
}
2️⃣ 중위 순회 (Inorder)
"왼쪽 → 부모 → 오른쪽"
Left → Root → Right
✅ 방문 순서:
D → B → E → A → C → F
✅ 설명:
- 왼쪽부터 끝까지 내려가서 D 방문
- D의 부모(B) 방문 → E 방문
- A 방문 후, C와 F 방문
🎯 재귀 코드
void Inorder(Node* root) {
if (root == nullptr) return;
Inorder(root->left); // 1️⃣ 왼쪽 방문
cout << root->data << " "; // 2️⃣ 부모 방문
Inorder(root->right); // 3️⃣ 오른쪽 방문
}
3️⃣ 후위 순회 (Postorder)
"왼쪽 → 오른쪽 → 부모"
Left → Right → Root
✅ 방문 순서:
D → E → B → F → C → A
✅ 설명:
- 왼쪽, 오른쪽 자식들을 모두 방문한 후, 부모 방문!
- D 방문 → E 방문 → B 방문
- F 방문 → C 방문 → A 방문 (맨 마지막!)
🎯 재귀 코드
void Postorder(Node* root) {
if (root == nullptr) return;
Postorder(root->left); // 1️⃣ 왼쪽 방문
Postorder(root->right); // 2️⃣ 오른쪽 방문
cout << root->data << " "; // 3️⃣ 부모 방문
}
4️⃣ 레벨 순회 (Level-order)
"위에서 아래로, 왼쪽에서 오른쪽으로"
BFS 방식 사용 (큐 활용!)
✅ 방문 순서:
A → B → C → D → E → F
✅ 설명:
- 한 층씩 내려가면서 방문!
- A → B, C → D, E, F 순서
🎯 큐(Queue)를 사용한 코드
void LevelOrder(Node* root) {
if (root == nullptr) return;
queue<Node*> q;
q.push(root);
while (!q.empty()) {
Node* curr = q.front();
q.pop();
cout << curr->data << " "; // 1️⃣ 현재 노드 방문
if (curr->left) q.push(curr->left); // 2️⃣ 왼쪽 자식 추가
if (curr->right) q.push(curr->right); // 3️⃣ 오른쪽 자식 추가
}
}
🚀 4가지 트리 순회 비교
순회 방법 순서 (예제 트리 A - B - C - D - E - F)
전위 순회 (Preorder) | A → B → D → E → C → F |
중위 순회 (Inorder) | D → B → E → A → C → F |
후위 순회 (Postorder) | D → E → B → F → C → A |
레벨 순회 (Level-order) | A → B → C → D → E → F |
🚀 한 줄 정리
순회 방법 방문 순서
전위순회 (Preorder) | 부모 → 왼쪽 → 오른쪽 |
중위순회 (Inorder) | 왼쪽 → 부모 → 오른쪽 |
후위순회 (Postorder) | 왼쪽 → 오른쪽 → 부모 |
레벨순회 (Level-order) | 위에서 아래로, 왼쪽에서 오른쪽 |
✅ 쉽게 이해하는 비유
순회 방식 현실 예제
전위 순회 (Preorder) | "집을 방문할 때, 먼저 부모(집 주인)를 만나고, 방을 방문하는 것!" |
중위 순회 (Inorder) | "방(왼쪽)을 먼저 본 다음, 집 주인(부모)과 이야기하고, 나머지 방(오른쪽)을 보는 것!" |
후위 순회 (Postorder) | "방을 다 보고 나서, 마지막에 집 주인(부모)과 이야기하는 것!" |
레벨 순회 (Level-order) | "건물 층별로 올라가면서 모든 방을 방문하는 것!" |
🚀 결론
"최단 거리 탐색(한 층씩 탐색)에는 레벨 순회(BFS), 깊이 탐색에는 DFS(전위, 중위, 후위)" 🚀