※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5639번 문제인 이진 검색 트리이다.
문제는 아래 링크를 확인하자.

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

 

5639번: 이진 검색 트리

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

www.acmicpc.net

각 노드를 루트로 하는 BST(binary search tree; 이진 검색 트리)는 그 수보다 작은 수들만으로 구성된 왼쪽 subtree와 큰 수들만으로 구성된 오른쪽 subtree로 이루어져있다는 점에 주목하여 재귀적으로 문제를 해결해보자.

 

주어진 BST가 조건에 주어진 키값 최댓값인 100만보다 큰 수를 root로 갖는 BST의 왼쪽 subtree라고 가정해도 모순이 생기지 않으므로, 아래와 같은 구현이 가능하다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int idx = 0;
int arr[10001];

void func(int root) {
	int val = arr[idx++];
	if (arr[idx] < val) func(val);
	if (arr[idx] < root) func(root);
	cout << val << '\n';
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int x, idx = 0;;
	while (cin >> x) {
		arr[idx++] = x;
	}

	arr[idx] = 1000000007;
	idx = 0;
	func(1000000000);
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 4386 // C++] 별자리 만들기  (0) 2021.11.25
[BOJ 2448 // C++] 별 찍기 - 11  (0) 2021.11.24
[BOJ 15353 // C++] 큰 수 A+B (2)  (0) 2021.11.22
[BOJ 10986 // C++] 나머지 합  (0) 2021.11.21
[BOJ 16532 // C++] Looking for the Risk Factor  (0) 2021.11.20

+ Recent posts