AcWing 4279. 笛卡尔树
原题链接
简单
作者:
YAX_AC
,
2024-12-11 20:24:22
,
所有人可见
,
阅读 5
//给小根堆中序遍历,求层序遍历
#include<bits/stdc++.h>
using namespace std;
const int N = 40;
int n;
int w[N];
vector<int> level[N];
int min_node(int l,int r)
{
int res = l;
for(int i = l; i<=r; i++)
if(w[i]<w[res]) res = i;
return res;
}
void dfs(int l,int r,int depth)
{
if(l>r) return;
int root = min_node(l,r);
level[depth].push_back(w[root]);
dfs(l,root-1,depth+1);
dfs(root+1,r,depth+1);
}
int main()
{
cin>>n;
for(int i = 0; i<n; i++) cin>>w[i];
dfs(0,n-1,0);
int flag = 0;
for(int i = 0; level[i].size(); i++)
for(auto x:level[i])
{
if(flag == 0) flag = 1;
else cout<<' ';
cout<<x;
}
return 0;
}