"나무처럼 생긴 자료 구조!"
부모 노드와 자식 노드가 있는 계층적인 구조!
예제 트리
A
/ \
B C
/ \ \
D E F
트리에서 모든 노드를 방문하는 방법에는 4가지가 있어!
✅ 전위순회(Preorder)
✅ 중위순회(Inorder)
✅ 후위순회(Postorder)
✅ 레벨순회(Level-order)
"부모 → 왼쪽 → 오른쪽"
Root → Left → Right
✅ 방문 순서:
A → B → D → E → C → F
✅ 설명:
🎯 재귀 코드
void Preorder(Node* root)
{
if (root == nullptr) return;
cout << root->data << " "; // 1️⃣ 부모 방문
Preorder(root->left); // 2️⃣ 왼쪽 방문
Preorder(root->right); // 3️⃣ 오른쪽 방문
}
"왼쪽 → 부모 → 오른쪽"
Left → Root → Right
✅ 방문 순서:
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️⃣ 오른쪽 방문
}
"왼쪽 → 오른쪽 → 부모"
Left → Right → Root
✅ 방문 순서:
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️⃣ 부모 방문
}
"위에서 아래로, 왼쪽에서 오른쪽으로"
BFS 방식 사용 (큐 활용!)
✅ 방문 순서:
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️⃣ 오른쪽 자식 추가
}
}
순회 방법 순서 (예제 트리 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(전위, 중위, 후위)" 🚀
분할정복 :합병 정렬 (Merge Sort) (0) | 2025.03.02 |
---|---|
트리 순회(Tree Traversal) 방법 02 : 코드 (0) | 2025.03.02 |
🚀 DFS와 BFS의 차이점! (0) | 2025.03.02 |
배열 출력하는 방법🚀 (0) | 2025.03.01 |
📌 비트 시프트 연산 (Bit Shift Operation) (0) | 2025.02.21 |