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

 

노드 구성 부분에서 막혀서 하단 링크의 코드 참조하였습니다. 문제시 삭제

https://im-gonna.tistory.com/90

 

[백준] 1991번 C++ "트리 순회" 풀이 / 트리, 전위-중위-후위 순회

https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가

im-gonna.tistory.com

소스 코드

#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
//https://im-gonna.tistory.com/90 참조
vector<vector<int>> tree;

// 전위 순회
void preorder_t(int idx)
{
    if (idx <= -1)
    {
        return;
    }
    else
    {
        cout << (char)('A' + idx);
        preorder_t(tree[idx][0]);
        preorder_t(tree[idx][1]);
    }
}

// 중위 순회
void inorder_t(int idx)
{
    if (idx <= -1)
    {
        return;
    }
    inorder_t(tree[idx][0]);
    cout << (char)('A' + idx);
    inorder_t(tree[idx][1]);
}

// 후위 순회
void postorder_t(int idx)
{
    if (idx <= -1)
    {
        return;
    }
    postorder_t(tree[idx][0]);
    postorder_t(tree[idx][1]);
    cout << (char)('A' + idx);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    tree.resize(n);
    for (int i = 0; i < n; i++)
    {
        char node;
        char lnode;
        char rnode;
        cin >> node >> lnode >> rnode;
        int nd = node - 'A';
        if (lnode!= '.')
        {
            int nd = node - 'A';
            tree[nd].push_back(lnode - 'A');
        }
        else
        {
            tree[nd].push_back(-1);
        }
        if (rnode != '.')
        {
            tree[nd].push_back(rnode - 'A');
        }
        else
        {
            tree[nd].push_back(-1);
        }
    }
    preorder_t(0);
    cout << "\n";
    inorder_t(0);
    cout << "\n";
    postorder_t(0);
}

+ Recent posts