반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

백준 2263 트리의 순회 본문

백준(Baekjoon) 문제

백준 2263 트리의 순회

huiung 2019. 4. 20. 23:40
반응형

 

https://www.acmicpc.net/problem/2263

문제와 채점은 위 사이트에서 확인 하실 수 있습니다.

 

이 문제는 트리의 중위 순회 순서와 후위 순회 순서를 입력받아 전위 순회 순서를 출력하는 문제입니다.

중위 순회와 후위 순회를 예를 만들어서 보게되면 후위 순회의 가장 끝이 항상 root를 나타냄을 알 수 있고

중위 순회에서는 그 루트를 기준으로 왼쪽에 있는 값들이 왼쪽 자식들이고 오른쪽에 있는 값들이 오른쪽 자식임을

알 수 있습니다. 따라서 이 특성을 이용하여 분할 정복을 통해 문제를 풀어야 합니다. 헷갈려서 쉽지 않은 문제였습니다,,

 

다음은 코드입니다.

 

 

#include <iostream>

using namespace std;

int in[200000];
int post[200000];
int n;

void preorder(int istart, int iend, int pstart, int pend) {
	
	if(istart > iend || pstart > pend)
		return;
	
	int root = post[pend];
	cout<<root<<' ';
	int left = in[root] - istart; 
	 
	preorder(istart, in[root]-1, pstart, pstart + left - 1);
	preorder(in[root]+1, iend, pstart + left, pend - 1);
	return; 
} 

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	cin >> n;
	for(int i = 1; i <= n; i++) {
		int x; cin >> x;
		in[x] = i;
		}
	for(int i = 1; i <= n; i++)
		cin >> post[i];
	
	preorder(1, n, 1, n); // 위치확인 왼쪽 오른쪽 탐색해서 트리 모양 유추 가능 
	
	return 0;
}

 

반응형

'백준(Baekjoon) 문제' 카테고리의 다른 글

백준 14502 연구소  (0) 2019.04.28
백준 13460 구슬 탈출2  (0) 2019.04.27
백준 3163 떨어지는 개미  (0) 2019.04.20
백준 1074 Z  (0) 2019.04.20
백준 1934 최소공배수  (0) 2019.03.08