코딩테스트준비
백준 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);
}