되면한다

백준 1991. 트리 순회(전위, 중위, 후위 순회) 본문

코딩테스트준비

백준 1991. 트리 순회(전위, 중위, 후위 순회)

haeullee 2023. 7. 31. 17:17

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

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파

www.acmicpc.net

트리의 전위 중위 후위 순회

#include <iostream>
#include <unordered_set>
#include <vector>
#include <stack>

using namespace std;

int n;
int lc[30];
int rc[30];
int p[30];
char _my, _left, _right;
int _myi, _lefti, _righti;
void dfs(int cur)
{
    cout << char(cur+'A');
    if(lc[cur]) dfs(lc[cur]);
    if(rc[cur]) dfs(rc[cur]);
}

void dfs1(int cur)
{
    if(lc[cur]) dfs1(lc[cur]);
    cout << char(cur+'A');
    if(rc[cur]) dfs1(rc[cur]);
}

void dfs2(int cur)
{ 
    if(lc[cur]) dfs2(lc[cur]);
    if(rc[cur]) dfs2(rc[cur]);
    cout << char(cur+'A');
}

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

    cin >> n;
    for(int i = 0; i < n; i++)
    {
        cin >> _my >> _left >> _right;

        _myi = int(_my - 'A');
        _lefti = int(_left - 'A');
        _righti = int(_right - 'A');
        
        if(_lefti >= 0 && _lefti <= 26)
        {
            lc[_myi] = _lefti;
        }

        if(_righti >= 0 && _righti <= 26)
        {
            rc[_myi] = _righti;
        }
    }

    dfs(0); cout << '\n'; fill(p, p + 29, 0);
    dfs1(0); cout << '\n'; fill(p, p + 29, 0);
    dfs2(0);    
}
Comments