April 13, 2021 ( last updated : April 13, 2021 )
분할정복
재귀
트리
https://github.com/sneakstarberry/
[백준] 4256번 트리
중위 순회와 전위 순를 한 값이 있을 때 전위 순회 값들을 구해라.
이전에 풀었던 유형과 비슷한데 이진트리는 중앙 루트 노드를 기준으로 양쪽이 서로 나뉩니다. 그리고 나뉜 트리의 가장 윗 쪽 노드를 새로운 루트 노트라고 가정하게 되면 새로운 이진 트리를 구성할 수 있습니다. 새로운 루트가 될 노드를 알 수 있는 방법은 중위 순회를 통해서 알 수 있습니다. 그리고 첫 루트 노드는 전위 순회를 통해서 알 수 있습니다.
#include <algorithm>
#include <iostream>
using namespace std;
int n;
int PRE[1001], IN[1001];
void post(int s, int e, int r) {
for (int i = s; i < e; ++i) {
if (IN[i] == PRE[r]) {
post(s, i, r + 1);
post(i + 1, e, r + 1 + i - s);
cout << PRE[r] << ' ';
}
}
}
int main() {
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--) {
cin >> n;
for (int i = 0; i < n; ++i)
cin >> PRE[i];
for (int i = 0; i < n; ++i)
cin >> IN[i];
post(0, n, 0);
cout << '\n';
}
return 0;
}
Originally published April 13, 2021
Latest update April 13, 2021
Related posts :