ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준(BOJ) 1991번 트리 순회
    알고리즘 풀이/백준(Boj) 2019. 8. 18. 18:28

    문제: https://www.acmicpc.net/problem/1991


    문제

    이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오.

    예를 들어 위와 같은 이진 트리가 입력되면,

    • 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식)
    • 중위 순회한 결과 : DBAECFG // (왼쪽 자식) (루트) (오른쪽 자식)
    • 후위 순회한 결과 : DBEGFCA // (왼쪽 자식) (오른쪽 자식) (루트)

    가 된다.


    나의 풀이:

    입력에 항상 A가 루트 노드가 된다라는 조건이 있기 때문에 따로 루트 노드를 구할 필요가 없는 문제였다. 배열을 만들어서 A- Z를 인덱

    스 [0] ~ [26] 으로 생각하고 자식 노드들을 넣는다. 순회 방식은 자료구조에서 배웠던 것 처럼 preOrder : V L R // InOrder L V R

    // postORder L R V 식으로 순회하며 답을 출력한다. 순회하면서 '.'이 온다면 NULL 이라는 의미임으로 탐색을 종료한다.

    'A'- 'A' = 0

    0 + 'A' = 'A'


    코드 ( C ++ )

    #include <iostream>

    #include <vector>

    using namespace std;

    int N;

    const int MAX = 26;

    int parent[MAX];

    vector<vector<char>> Tree;

    void preOrder(char root)

    {

    // '.' 이라면 탐색종료

    if (root == '.')

    return;


    char left =Tree[root-'A'][0];

    char right =Tree[root-'A'][1];

    printf("%c", root);

    preOrder(left);

    preOrder(right);

    }

    void InOrder(char root)

    {

    if (root == '.')

    return;

    // [0] 이 왼쪽 , [1]이 오른쪽 자식이 될 것

    char left = Tree[root - 'A'][0];

    char right = Tree[root - 'A'][1];

    InOrder(left);

    printf("%c", root);

    InOrder(right);

    }

    void postOrder(char root)

    {

    if (root == '.')

    return;


    char left = Tree[root - 'A'][0];

    char right = Tree[root - 'A'][1];

    postOrder(left);

    postOrder(right);

    printf("%c", root);

    }

    int main()

    {

    cin >> N;

    Tree = vector<vector<char>>(N, vector<char>());

    for (int i = 0; i < N; ++i)

    {

    char a, b, c;

    cin >> a >> b >> c;

    // 왼쪽자식, 오른쪽자식을 넣어준다.

    Tree[a - 'A'].push_back(b);

    Tree[a - 'A'].push_back(c);

    }

    preOrder(0 + 'A');

    cout << endl;

    InOrder(0 + 'A');

    cout << endl;

    postOrder(0 + 'A');

    return 0;

    }




    '알고리즘 풀이 > 백준(Boj)' 카테고리의 다른 글

    백준(BOJ) 3020번 개똥벌레  (0) 2019.08.22
    백준(BOJ) 10828번 스택  (0) 2019.08.18
    백준(BOJ) 2644번 촌수계산  (0) 2019.08.18
    백준(BOJ) 1707번 이분 그래프  (0) 2019.08.17
    백준(BOJ) 1049번 기타줄  (0) 2019.08.16
Designed by Tistory.