传送门
题意
给定长度为 \(n\) 的一个完全二叉搜索数序列,求出它的层序遍历序列
数据范围
\(n\leq 1000\)
题解
- 将序列排序后即中序遍历序列
- 层序遍历序列即堆存储的序列
- 结合深度优先搜索树的特性即中序遍历,结合堆存储,维护堆存储的下标
- 搜索过程中不断的将数添加到堆存储下标的数组中最后即层序遍历
Code
#include<bits/stdc++.h>
using namespace std;
int in[1010];
int lv[1010];
int n,id=1;
void dfs(int u){
if(u>n) return;
dfs(u*2);
lv[u]=in[id++];
dfs(u*2+1);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>in[i];
sort(in+1,in+n+1);
dfs(1);
for(int i=1;i<=n;i++) printf("%s%d",i>1?" ":"",lv[i]);
}