본문 바로가기

Algorithm/BAEKJOON

[BOJ] 5639번 이진 검색 트리 (C++)

728x90
반응형

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

 

5639번: 이진 검색 트리

트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다

www.acmicpc.net

 

#include <iostream>
using namespace std;

int tree[10000];

void postOrder(int start, int end){
	if (start >= end) {
		return;
	}
	if (start == end - 1){
		cout << tree[start] << "\n";
		return;
	}
	int idx = start + 1;
	while (idx<end) {
		if (tree[start] < tree[idx]) {
			break;
		}
		idx++;
	}
	postOrder(start+1, idx);
	postOrder(idx, end);
	cout << tree[start] << "\n";
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	int num;
	int ipidx = 0;
	while(cin >> num){
		tree[ipidx++] = num;
	}
	
	postOrder(0, ipidx);
	return 0;
}

트리의 전위 순회가 입력으로 주어졌을 때, 이를 가지고 후위 순회 결과를 출력하는 문제이다.

전위 순회 결과가 다음과 같다면

50 30 24 5 28 45 98 52 60

루트 노드는 50이고, 루트 노드보다 큰 값이 나오기 전까지는 모두 루트 노드의 왼쪽 자식들일 것이다. (root, left, right)

left, right, root 순으로 재귀를 돌려주면 후위 순회 결과를 출력할 수 있다.

728x90
반응형

'Algorithm > BAEKJOON' 카테고리의 다른 글

[BOJ] 2252번 줄 세우기 (C++)  (0) 2021.12.23
[BOJ] 1822번 차집합 (C++)  (0) 2021.12.23
[BOJ] 1978번 소수 찾기 (C++)  (0) 2021.11.12
[BOJ] 15651번 N과 M (3) (C++)  (0) 2021.11.11
[BOJ] 1987번 알파벳 (C++)  (0) 2021.11.10