Notice
Recent Posts
Link
정화 코딩
[C++] 이진 검색 트리 (백준 5639번) 본문
https://www.acmicpc.net/problem/5639
#include <iostream>
#include <vector>
using namespace std;
vector<int> a;
void post(int s, int e) {
if (s >= e) return;
int idx = e;
for (int i = s + 1; i < e; i++) {
if (a[i] > a[s]) {
idx = i;
break;
}
}
post(s + 1, idx);
post(idx, e);
cout << a[s] << '\n';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int x;
while (cin >> x) {
a.push_back(x);
}
int n = a.size();
post(0, n);
}
이 문제는 트리 구조를 만들어서 뭔갈 한다기 보다는 어떻게 하면 전위 순회를 통해 트리 구조를 파악하고, 그걸 또 후위 순회로 어떻게 바꿀까를 생각하면 도움이 된다.
전위 순회 결과에서 맨 위의 값은 가운데 값이고, 그 값을 기준으로 그보다 작은 수들은 왼쪽 서브트리를 이루고 그 보다 큰 수들은 오른쪽 서브트리를 이룬다.
이 과정을 재귀적으로 반복하면 이렇게 된다. 각 서브트리 안에서 또 다시 왼쪽 서브트리와 오른쪽 서브트리로 나눌 수 있는 것이다. 각 트리에서 왼쪽, 오른쪽, 루트 순서로 출력하면 그것이 바로 후위 순회인 것이다.
(AC)
'PS' 카테고리의 다른 글
[C++] 수위 아저씨의 고민 (백준 9048번) (0) | 2025.01.03 |
---|---|
[C++] 문자열 폭발 (백준 9935번) (1) | 2024.12.21 |
[C++] 팰린드롬 (백준 10174번) (0) | 2024.12.13 |
[C++] A → B (백준 16953번) (0) | 2024.11.27 |
[C++] 벽 부수고 이동하기 (0) | 2024.11.26 |
Comments