题解
这道题给定完全二叉树的后序遍历,求层序遍历
完全二叉树采用顺序存储,输入的时候后序遍历输入,即可获得整棵完全二叉树的结构,最后顺序输出即可
同理给定完全二叉树的先序,中序遍历也可以求出整棵完全二叉树的结构
如果不是完全二叉树或者满二叉树则不一定能确定唯一的树的结构
AC代码
#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define ll long long
#define ull unsigned long long
#define IOS ios::sync_with_stdio(0),cin.tie(0)
#define gcd(a,b) __gcd(a,b)
#define ft first
#define sd second
#define endl '\n'
#define PI acos(-1.0)
#define lcm(a,b) a/gcd(a,b)*b
#define INF_INT 0x3f3f3f3f
#define INF_LONG 4557430888798830399
#define N 100009
//inline void print(__int128 x){if(x<0) {putchar('-'); x=-x;}if(x>9) print(x/10);putchar(x%10+'0');}
//inline int read(){int s=0,x=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') x=-1; ch=getchar();} while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar(); }return s*x;}
int a[N],tr[N];
int t=1;
int n;
void dfs(int u)
{
if(u>n) return ;
//左右根
dfs(u*2);
dfs(u*2+1);
cin>>tr[u];
}
int main()
{
cin>>n;
//for(int i=1; i<=n; i++) scanf("%d",a+i);
dfs(1);
for(int i=1; i<=n; i++)
{
cout<<tr[i];
if(i<n) printf(" ");
}
return 0;
}