L2-035 完全二叉树的层序遍历 (25 分)——完全二叉树的性质

题目链接

题解

这道题给定完全二叉树的后序遍历,求层序遍历
完全二叉树采用顺序存储,输入的时候后序遍历输入,即可获得整棵完全二叉树的结构,最后顺序输出即可
同理给定完全二叉树的先序,中序遍历也可以求出整棵完全二叉树的结构
如果不是完全二叉树或者满二叉树则不一定能确定唯一的树的结构

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;
 } 



posted @ 2022-08-28 08:43  翔村亲亲鸟  阅读(70)  评论(0编辑  收藏  举报