※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |