백준 코딩
백준 1991번:트리 순회
까르르꿍꿍
2021. 10. 11. 19:58
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
이 문제는 트리 순회를 정석 문제이다.
전위순회, 중위순회,후위순회 를 구하는 문제이고
나는 배열 A[i][0]을 i의 왼쪽노드 A[i][1]을 i의 오른쪽 노드로 정하고 시작하였다.
#include<iostream>
#include <queue>
#include <cstdio>
using namespace std;
#pragma warning(disable : 4996)
char a[26][2];
void preorder(char x) { //전위순회
if (x == '.') //탈출조건 .일경우 노드 없는것 리턴
return;
cout << x;
preorder(a[x-'A'][0]);
preorder(a[x - 'A'][1]);
}
void inorder(char x) { //중위순회
if (x == '.')
return;
inorder(a[x - 'A'][0]);
cout << x;
inorder(a[x - 'A'][1]);
}
void postorder(char x) { //후위순회
if (x == '.') {
return;
}
postorder(a[x - 'A'][0]);
postorder(a[x - 'A'][1]);
cout << x;
}
int main() {
int n;
cin >> n;
while (n--) {
char p, cr, cl;
cin >> p >> cl >> cr;
int x = p - 'A';
a[x][0] = cl; //왼쪽노드 입력
a[x][1] = cr; //오른쪽 노드 입력
}
preorder('A');
cout << '\n';
inorder('A');
cout << '\n';
postorder('A');
return 0;
}