【1064 30 完全二叉搜索树】 Complete Binary Search Tree

传送门

题意

给定长度为 \(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]);
}
上一篇:使用BAPI_MATERIAL_SAVEDATA无法写入扩展字段


下一篇:LVM逻辑卷管理器