728x90
반응형
📕오늘의 공부 주제
Tree의 순회(Traversal) 방법
🤔Why?
트리(Tree) 구조를 다루다 보면 **모든 노드를 특정 순서로 방문**해야 하는 경우가 많습니다. 예를 들어, 폴더 구조 탐색, 게임 오브젝트 계층 처리, AI 탐색 알고리즘 등이 모두 트리 순회와 관련 있습니다. 이번에 정리하면서 **DFS(깊이 우선 탐색)**와 **BFS(너비 우선 탐색)**의 차이와 구현 방법을 명확히 이해하려고 합니다.
📖오늘의 공부 내용
1. 트리 순회의 종류
트리 순회는 크게 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)으로 나눌 수 있습니다.
2. 깊이 우선 탐색(DFS: Depth-First Search)
- 한 경로를 끝까지 따라간 후, 다시 돌아와 다른 경로를 탐색.
- 순회 방식
- 전위 순회(Pre-order): Root → Left → Right
- 중위 순회(In-order): Left → Root → Right (이진 탐색 트리에서 정렬된 순서 출력)
- 후위 순회(Post-order): Left → Right → Root
// 전위 순회
void PreOrder(Node node)
{
if (node == null) return;
Console.Write(node.Value + " ");
PreOrder(node.Left);
PreOrder(node.Right);
}
// 중위 순회
void InOrder(Node node)
{
if (node == null) return;
InOrder(node.Left);
Console.Write(node.Value + " ");
InOrder(node.Right);
}
// 후위 순회
void PostOrder(Node node)
{
if (node == null) return;
PostOrder(node.Left);
PostOrder(node.Right);
Console.Write(node.Value + " ");
}
3. 너비 우선 탐색(BFS: Breadth-First Search)
- 같은 레벨(Level)의 노드를 먼저 탐색.
- 보통 Queue를 사용.
void BFS(Node root)
{
if (root == null) return;
Queue<Node> queue = new Queue<Node>();
queue.Enqueue(root);
while (queue.Count > 0)
{
Node node = queue.Dequeue();
Console.Write(node.Value + " ");
if (node.Left != null) queue.Enqueue(node.Left);
if (node.Right != null) queue.Enqueue(node.Right);
}
}
4. DFS vs BFS 비교
| 구분 | DFS | BFS |
|---|---|---|
| 탐색 방식 | 깊이 우선 | 너비 우선 |
| 자료구조 | 재귀(Stack) | Queue |
| 메모리 사용 | 깊은 트리에서 스택 오버플로 위험 | 넓은 트리에서 메모리 사용량 많음 |
| 활용 | 경로 탐색, 백트래킹 | 최단 경로 탐색 |
5. 결론
- DFS: 깊게 파고들어 탐색 → 재귀나 스택 활용
- BFS: 레벨 단위로 탐색 → 큐 활용
- 상황에 따라 적절한 순회 방법 선택이 중요
728x90
반응형
'프로그래밍 공부 > TIL' 카테고리의 다른 글
| 2025-08-13 TIL (0) | 2025.08.13 |
|---|---|
| 2025-08-11 TIL (0) | 2025.08.11 |
| 2025-08-08 TIL (0) | 2025.08.08 |
| 2025-08-07 TIL (0) | 2025.08.07 |
| 2025-08-06 TIL (0) | 2025.08.06 |
