코딩성장스토리

백준 1991번:트리 순회 본문

백준 코딩

백준 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;
}

'백준 코딩' 카테고리의 다른 글

백준 1167번: 트리의 지름  (0) 2021.10.18
백준 11725번: 트리의 부모 찾기  (0) 2021.10.18
백준 2146번:다리 만들기  (0) 2021.10.09
백준2178번:미로 탐색  (0) 2021.10.08
백준 2667번:단자번호붙이기  (0) 2021.10.07