문제 출처
https://www.acmicpc.net/problem/1991
실버1 트리 문제이다.
트리에 관한 설명은 아래 게시물에서 확인할 수 있다.
https://codingul1234.tistory.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%8A%B8%EB%A6%ACTree
[자료구조] 트리(Tree)
트리는 앞으로 가장 많이 볼 자료구조이며, 가장 기본적인 그래프다.트리는 유방향 그래프로 위에서 아래로만 진행이 되며, 순환이 없다.트리의 개념은 다음과 같다.트리는 하나의 루트 노드를
codingul1234.tistory.com
재귀적으로 봤을 때,
전위 탐색은
데이터 출력 -> preorder(tree.left) -> preorder(tree.right)
중위 탐색은
inorder(tree.left) -> 데이터 출력 -> inorder(tree.right)
후위 탐색은
postorder(tree.left) -> postorder(tree.right) -> 데이터 출력
순으로 재귀 함수를 작성하면 된다.
#풀이
#include<iostream>
#include<vector>
#define MAX 26
using namespace std;
struct Tree{
char left;
char right;
};
Tree tree[MAX+1]={};
void preorder(char n){
if(n == '.') return;
cout<<n;
preorder(tree[n-'A'].left);
preorder(tree[n-'A'].right);
}
void inorder(char n){
if(n == '.') return;
inorder(tree[n-'A'].left);
cout<<n;
inorder(tree[n-'A'].right);
}
void postorder(char n){
if(n == '.') return;
postorder(tree[n-'A'].left);
postorder(tree[n-'A'].right);
cout<<n;
}
int main()
{
int N;
cin>>N;
for(int i=0;i<N;i++){
char a,b,c;
cin>>a>>b>>c;
tree[a-'A'] = {b,c};
}
preorder('A');
cout<<"\n";
inorder('A');
cout<<"\n";
postorder('A');
return 0;
}
'백준' 카테고리의 다른 글
[백준] 2457: 공주님의 정원 - C/C++ (0) | 2024.05.08 |
---|---|
[백준] 2606: 바이러스 - C/C++ (1) | 2024.04.27 |
[백준] 16236: 아기 상어 - C/C++ (0) | 2024.04.27 |
[백준] 2012: 등수 매기기 - C/C++ (0) | 2024.03.27 |
[백준] 2164: 카드2 - C/C++ (0) | 2024.03.27 |