* 탐색결과를 트리로원복
1 6 4 3 5 2 7
mid를 푸쉬, 재귀적으로 mid를 푸쉬하면된다.
3
6, 2
...
종료조건국룰 : start>end ----> return;
종료조건 : start==end -> push(mid==start==end), return
#include<bits/stdc++.h>
using namespace std;
int _end,n;
vector<int> ret[14];
int a[1030]; //최대노드수 : 2^10-1
void go(int s, int e, int level) {
if (s > e) return; //국룰예외처리
if (s == e) {
ret[level].push_back(a[s]);
return;
}
int mid = (s + e) / 2;
ret[level].push_back(a[mid]);
go(s, mid - 1, level + 1);
go(mid + 1, e, level + 1);
}
int main() {
cin >> n;
_end = (int)pow(2, n) - 1;
for (int i = 0; i < _end; i++) {
cin >> a[i]; //노드저장
}
go(0,_end, 0);
for (int i = 0; i < n; ++i) {
for (auto j : ret[i]) {
cout << j << " ";
}
cout << "\n";
}
return 0;
}
'Algorithm > boj' 카테고리의 다른 글
백준16916 // cpp 문자열 포함검사 O(N+M), strstr vs find (0) | 2023.07.11 |
---|---|
백준 9046 복호화 //map을 정렬하는방법, vector로 옮겨라, 문자열은 map필요X 배열만으로됨 (0) | 2023.07.10 |
백준 2529 부등호 // 재귀로 완탐구현 , string 정렬시주의 (0) | 2023.06.21 |
백준 1987 알파벳 // 노드가 각자의visit을 가져야한다면 원복! , dfs visit[now] [next]둘중 하나만 해라 (1) | 2023.06.13 |
백준 3197 백조의 호수 // bfs멈춰는 tempQ, 1차원에서 논리짜라, next경우의수를 나눠서 처리하라, pair Q 클리어하는법 (1) | 2023.06.13 |