[Algorithm][κ·Έλž˜ν”„] 트리 순회(Tree Traversal)

2025. 5. 6. 21:31Β·Computer Science/Algorithm

트리 순회

이번 ν¬μŠ€νŠΈμ—μ„œλŠ” κ·Έλž˜ν”„ 탐색 μ•Œκ³ λ¦¬μ¦˜ 쀑 ν•˜λ‚˜μΈ 트리 μˆœνšŒμ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.



트리 순회(Tree Traversal)λž€?

  • 트리 κ΅¬μ‘°μ—μ„œ λͺ¨λ“  λ…Έλ“œλ₯Ό νŠΉμ •ν•œ μˆœμ„œλ‘œ ν•œ λ²ˆμ”© λ°©λ¬Έν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • νŠΈλ¦¬λŠ” 계측적 μžλ£Œκ΅¬μ‘°μ΄λ―€λ‘œ λ‹¨μˆœνžˆ μ„ ν˜•μ μœΌλ‘œ νƒμƒ‰ν•˜λŠ” 게 μ•„λ‹ˆλΌ λ…Έλ“œ κ°„μ˜ λΆ€λͺ¨-μžμ‹ 관계λ₯Ό κ³ λ €ν•œ 탐색 방식이 ν•„μš”ν•©λ‹ˆλ‹€.
  • μˆœνšŒλŠ” 컴퓨터 ꡬ쑰, 파일 μ‹œμŠ€ν…œ 탐색, μˆ˜μ‹ 트리 평가 λ“± λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ ν™œμš©λ©λ‹ˆλ‹€.
  • 순회 λ°©λ²•μœΌλ‘œλŠ” μ „μœ„ 순회, μ€‘μœ„ 순회, ν›„μœ„ μˆœνšŒκ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

❓ μ™œ μ—¬λŸ¬κ°€μ§€ 순회 방법이 μ‘΄μž¬ν•˜λ‚˜μš”?

  • νŠΈλ¦¬λŠ” λ°©ν–₯μ„±κ³Ό 계측이 μžˆλŠ” ꡬ쑰이기 λ•Œλ¬Έμ— μ–΄λ–€ λ…Έλ“œλ₯Ό λ¨Όμ € λ°©λ¬Έν• μ§€, μžμ‹ λ…Έλ“œλ₯Ό μ–Έμ œ μ²˜λ¦¬ν• μ§€μ— 따라 μ˜λ―Έκ°€ 달라지기 λ•Œλ¬Έμž…λ‹ˆλ‹€.



μ „μœ„ 순회(Preorder Traversal)

  • μžμ‹ (λΆ€λͺ¨) λ…Έλ“œλ₯Ό λ¨Όμ € λ°©λ¬Έν•˜κ³  μ™Όμͺ½ → 였λ₯Έμͺ½ μžμ‹ 순으둜 νƒμƒ‰ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • 트리 볡사, ν‘œν˜„μ‹ 생성 등에 자주 μ‚¬μš©λ©λ‹ˆλ‹€.
  • μˆ˜λ„ μ½”λ“œ
Preorder(node):
    if node is not null:
        visit(node)                 // ν˜„μž¬ λ…Έλ“œλ₯Ό λ¨Όμ € λ°©λ¬Έ
        Preorder(node.left)   // μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬ 순회
        Preorder(node.right) // 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬ 순회



μ€‘μœ„ 순회(Inorder Traversal)

  • μ™Όμͺ½ μžμ‹ λ…Έλ“œλ“€μ„ λ¨Όμ € νƒμƒ‰ν•˜κ³  κ·Έλ‹€μŒ 루트λ₯Ό λ°©λ¬Έ, λ§ˆμ§€λ§‰μœΌλ‘œ 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œλ“€μ„ νƒμƒ‰ν•©λ‹ˆλ‹€.
  • 이진 탐색 트리(BST)μ—μ„œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬λœ κ²°κ³Όλ₯Ό 얻을 수 μžˆλŠ” μˆœνšŒμž…λ‹ˆλ‹€.
  • μˆ˜λ„ μ½”λ“œ
Inorder(node):
    if node is not null:
        Inorder(node.left)    // μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬ 순회
        visit(node)               // ν˜„μž¬ λ…Έλ“œ λ°©λ¬Έ
        Inorder(node.right) // 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬ 순회



ν›„μœ„ 순회(Postorder Traversal)

  • μ™Όμͺ½ → 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œλ₯Ό λͺ¨λ‘ λ°©λ¬Έν•˜κ³  μžμ‹ (λΆ€λͺ¨) λ…Έλ“œλ₯Ό νƒμƒ‰ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • 트리 ꡬ쑰 μ‚­μ œλ‚˜ ν•˜μœ„ μž‘μ—… μ™„λ£Œ ν›„ μƒμœ„ μž‘μ—…μ„ ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ— μ ν•©ν•©λ‹ˆλ‹€.
  • μˆ˜λ„ μ½”λ“œ
Postorder(node):
    if node is not null:
        Postorder(node.left)   // μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬ 순회
        Postorder(node.right) // 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬ 순회
        visit(node)                  // ν˜„μž¬ λ…Έλ“œλ₯Ό λ§ˆμ§€λ§‰μ— λ°©λ¬Έ



트리 순회 예제

        A
       /  \
      B   C
     /  \
    D   E
순회 방식 λ°©λ¬Έ μˆœμ„œ
μ „μœ„ 순회 A → B → D → E → C
μ€‘μœ„ 순회 D → B → E → A → C
ν›„μœ„ 순회 D → E → B → C → A



트리 순회 μ½”λ“œ κ΅¬ν˜„ν•˜κΈ°

#include <bits/stdc++.h>
using namespace std;

const int MAX = 100;

struct TreeNode {
    char data;
    int left;   // μ™Όμͺ½ μžμ‹μ˜ 인덱슀
    int right;  // 였λ₯Έμͺ½ μžμ‹μ˜ 인덱슀
};

// 트리 λ°°μ—΄ μ •μ˜
TreeNode tree[MAX];
int root = 0; // 루트 λ…Έλ“œ 인덱슀

// μ „μœ„ 순회 (Preorder): 루트 → μ™Όμͺ½ → 였λ₯Έμͺ½
void preorder(int idx) {
    if (idx == -1) return;
    cout << tree[idx].data << ' ';
    preorder(tree[idx].left);
    preorder(tree[idx].right);
}

// μ€‘μœ„ 순회 (Inorder): μ™Όμͺ½ → 루트 → 였λ₯Έμͺ½
void inorder(int idx) {
    if (idx == -1) return;
    inorder(tree[idx].left);
    cout << tree[idx].data << ' ';
    inorder(tree[idx].right);
}

// ν›„μœ„ 순회 (Postorder): μ™Όμͺ½ → 였λ₯Έμͺ½ → 루트
void postorder(int idx) {
    if (idx == -1) return;
    postorder(tree[idx].left);
    postorder(tree[idx].right);
    cout << tree[idx].data << ' ';
}

int main() {
    /*
            A
           / \
          B   C
         / \
        D   E
    */

    // λ…Έλ“œ ꡬ성
    tree[0] = {'A', 1, 2}; // A: left → B(1), right → C(2)
    tree[1] = {'B', 3, 4}; // B: left → D(3), right → E(4)
    tree[2] = {'C', -1, -1}; // C: 리프
    tree[3] = {'D', -1, -1}; // D: 리프
    tree[4] = {'E', -1, -1}; // E: 리프

    cout << "μ „μœ„ 순회 (Preorder): ";
    preorder(root);
    cout << "\n";

    cout << "μ€‘μœ„ 순회 (Inorder): ";
    inorder(root);
    cout << "\n";

    cout << "ν›„μœ„ 순회 (Postorder): ";
    postorder(root);
    cout << "\n";

    return 0;
}



λ§ˆλ¬΄λ¦¬ν•˜λ©°

  • 이번 κΈ€μ—μ„œλŠ” 트리 μžλ£Œκ΅¬μ‘°μ—μ„œ κ°€μž₯ 핡심적인 κ°œλ… 쀑 ν•˜λ‚˜μΈ 트리 순회(Tree Traversal) 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€.
  • μ „μœ„ μˆœνšŒλŠ” λ£¨νŠΈμ—μ„œ μ‹œμž‘ν•΄ 쒌우 μžμ‹μ„ λ°©λ¬Έν•˜λ―€λ‘œ 트리의 ꡬ쑰λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ 볡원할 λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
  • μ€‘μœ„ μˆœνšŒλŠ” 이진 탐색 νŠΈλ¦¬μ—μ„œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬λœ κ²°κ³Όλ₯Ό μ–»λŠ” 데 자주 μ‚¬μš©λ©λ‹ˆλ‹€.
  • ν›„μœ„ μˆœνšŒλŠ” μžμ‹ λ…Έλ“œλ₯Ό λͺ¨λ‘ μ²˜λ¦¬ν•œ ν›„ λΆ€λͺ¨λ₯Ό λ°©λ¬Έν•˜κΈ° λ•Œλ¬Έμ— 디렉토리 μ‚­μ œμ™€ 같은 μž‘μ—… μˆœμ„œμ—μ„œ μ ν•©ν•©λ‹ˆλ‹€.
  • 트리 μˆœνšŒλŠ” λ‹¨μˆœνžˆ 이둠으둜 λλ‚˜λŠ” κ°œλ…μ΄ μ•„λ‹ˆλΌ μ‹€μ „ μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œμ™€ 자료ꡬ쑰 κ΅¬ν˜„μ— μ§μ ‘μ μœΌλ‘œ μ—°κ²°λ˜λŠ” μ£Όμ œμž…λ‹ˆλ‹€. μ•Œκ³ λ¦¬μ¦˜μ˜ 기초λ₯Ό λ‹€μ§€λŠ” 데 κΌ­ ν•„μš”ν•œ κ°œλ…μ΄λ―€λ‘œ 직접 μ†μœΌλ‘œ 순회 μˆœμ„œλ₯Ό 그렀보고 λ‹€μ–‘ν•œ 트리 ꡬ쑰에 μ μš©ν•΄λ³΄λ©΄μ„œ μ΅μˆ™ν•΄μ§€λŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€.

'Computer Science > Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Algorithm][λΉ„νŠΈμ—°μ‚°] λΉ„νŠΈλ§ˆμŠ€ν‚Ή(Bitmasking)  (0) 2025.06.28
[Algorithm][탐색] 완전탐색과 λ°±νŠΈλž˜ν‚Ή(Brute Force & Backtracking)  (2) 2025.06.08
[Algorithm][κ·Έλž˜ν”„] λ„ˆλΉ„μš°μ„ νƒμƒ‰(BFS, Breadth First Search)  (0) 2025.05.05
[Algorithm][κ·Έλž˜ν”„] κΉŠμ΄μš°μ„ νƒμƒ‰(DFS, Depth First Search)  (0) 2025.05.05
[Algorithm][κ·Έλž˜ν”„] 이둠 기초(κ·Έλž˜ν”„, 이진 트리, 인접행렬, μΈμ ‘λ¦¬μŠ€νŠΈ)  (1) 2025.05.05
'Computer Science/Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Algorithm][λΉ„νŠΈμ—°μ‚°] λΉ„νŠΈλ§ˆμŠ€ν‚Ή(Bitmasking)
  • [Algorithm][탐색] 완전탐색과 λ°±νŠΈλž˜ν‚Ή(Brute Force & Backtracking)
  • [Algorithm][κ·Έλž˜ν”„] λ„ˆλΉ„μš°μ„ νƒμƒ‰(BFS, Breadth First Search)
  • [Algorithm][κ·Έλž˜ν”„] κΉŠμ΄μš°μ„ νƒμƒ‰(DFS, Depth First Search)
_λŒ€λ‹ˆ_
_λŒ€λ‹ˆ_
  • _λŒ€λ‹ˆ_
    λŒ€λ‹ˆμ˜ Devlog πŸ‘¨‍πŸ’»
    _λŒ€λ‹ˆ_
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (18)
      • Computer Science (17)
        • Algorithm (17)
      • Language (0)
        • Java (0)
      • Cloud (1)
        • Azure (Microsoft) (1)
        • NCP (Naver) (0)
        • GCP (Google) (0)
        • AWS (Amazon) (0)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    μ•Œκ³ λ¦¬μ¦˜κΈ°μ΄ˆ
    BFS
    κ·Έλž˜ν”„μ•Œκ³ λ¦¬μ¦˜
    ν”Œλ‘œμ΄λ“œμ›Œμ…œλΉ„κ΅
    μž¬κ·€ν•¨μˆ˜
    κ·Έλž˜ν”„νƒμƒ‰
    λ°±νŠΈλž˜ν‚Ή
    λ‹€μ΅μŠ€νŠΈλΌλΉ„κ΅
    λΉ…μ˜€ν‘œκΈ°λ²•
    μˆœμ—΄μ‘°ν•©
    κ·Έλž˜ν”„
    μ•Œκ³ λ¦¬μ¦˜
    μ½”λ”©ν…ŒμŠ€νŠΈ
    완전탐색
    경우의수
    bigo
    μ΅œλ‹¨κ²½λ‘œ
    o(logn)
    μ΄μ§„νŠΈλ¦¬
    μ΅œμ ν™”
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
_λŒ€λ‹ˆ_
[Algorithm][κ·Έλž˜ν”„] 트리 순회(Tree Traversal)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”