AcWing 4279. 找最小数当根结点
原题链接
简单
作者:
fei0825
,
2023-05-24 10:59:39
,
所有人可见
,
阅读 25
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
const int N = 35, INF = 0x7fffffff;
int inOrder[N];
vector<vector<int>> le(N);
void build(int l, int r, int k){
if( l>r ) return ;
bool f = false;
int minNum = INF, t = -1;
for( int i=l; i<=r; i++ ){
if( !f || inOrder[i]<minNum ){
f = true;
minNum = inOrder[i];
t = i;
}
}
le[k].push_back(inOrder[t]);
build(l, t-1, k+1);
build(t+1, r, k+1);
}
int main(){
int n;
scanf("%d", &n);
for( int i=0; i<n; i++ ){
scanf("%d", &inOrder[i]);
}
build(0, n-1, 0);
printf("%d", le[0][0]);
for( int i=1; i<le.size(); i++ ){
for( auto& j: le[i] ){
printf(" %d", j);
}
}
puts("");
return 0;
}