백준

[백준] 1991: 트리 순회 - C/C++

ul88 2024. 4. 29. 15:56

문제 출처

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