문제
입력
출력
문제 해결
pl, pr : 전위 순회의 첫 번째와 마지막
il, ir : 중위 순회의 첫 번째와 마지막
전위 순회에서 첫 번째는 무조건 현재 트리의 루트.
중위 순회에서 현재 트리 루트의 위치를 찾으면 그 왼쪽 pl까지의 개수는 왼쪽 자식트리 노드의 개수
같은 이유로 루트의 오른쪽 pr까지의 개수는 오른쪽 자식트리 노드의 개수
코드
#include <iostream>
using namespace std;
int pre[1001], in[1001];
// 전위 순회의 루트는 무조건 첫 번째
// 중위 순회에서 루트의 왼쪽 pl까지의 개수 = 왼쪽 자식트리 노드 개수
// 중위 순회에서 루트의 오른쪽 pr까지의 개수 = 오른쪽 자식 트리 노드 개수
void solution(int pl, int pr, int il, int ir) {
if (pl == pr) {
cout << pre[pl] << ' ';
return;
}
for (int i = 0; i <= pr - pl; i++) {
if (pre[pl] == in[il + i]) {
solution(pl + 1, pl + i, il, il + i - 1); // 왼쪽 트리
solution(pl + i + 1, pr, il + i + 1, ir); // 오른쪽 트리
cout << pre[pl] << ' '; // 루트 출력
}
}
}
int main() {
int t, n;
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];
solution(0, n - 1, 0, n - 1);
cout << endl;
}
}
'🎲 BOJ > 🥇' 카테고리의 다른 글
[C++] 백준 5430 : AC (0) | 2023.08.06 |
---|---|
[C++] 백준 20922 : 겹치는 건 싫어 (0) | 2022.02.09 |
[C++] 백준 1072 : 게임 (0) | 2022.02.08 |
[C++] 백준 2533 : 사회망 서비스(SNS) (0) | 2022.02.07 |