天梯赛 L2-035 完全二叉树的层序遍历 (25 分)
二叉树的遍历主要有三种:
(1)先(根)序遍历(根左右)
(2)中(根)序遍历(左根右)
(3)后(根)序遍历(左右根)
举个例子:
先(根)序遍历(根左右):A B D H E I C F J K G
中(根)序遍历(左根右) : D H B E I A J F K C G
后(根)序遍历(左右根) : H D I E B J K F G C A
模拟
#include <bits/stdc++.h>
using namespace std;
int n,a[100];
void dfs(int u){
int l=u*2+1;
int r=u*2+2;
if(l<n)dfs(l);
if(r<n)dfs(r);
cin>>a[u];
}
int main()
{
cin>>n;
dfs(0);
for(int i=0;i<n;++i){
if(i!=n-1)cout<<a[i]<<" ";
else cout<<a[i];
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n;
class node
{
public :
int l,r,w;
}ns[100];
void hou(int u)
{
if(ns[u].l!=0)hou(ns[u].l);
if(ns[u].r!=0)hou(ns[u].r);
cin>>ns[u].w;
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
{
if(i*2<=n)ns[i].l=i*2;
if(i*2+1<=n)ns[i].r=i*2+1;
}
hou(1);
for(int i=1;i<=n;++i)
{
if(i!=n)cout<<ns[i].w<<" ";
else cout<<ns[i].w;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
class node
{
public :
int l,r,w;
}ns[100];
int n;
void hou(int u)
{
if(u*2<=n)hou(u*2);
if(u*2+1<=n)hou(u*2+1);
cin>>ns[u].w;
}
int main()
{
cin>>n;
hou(1);
for(int i=1;i<=n;++i)
{
if(i!=n)cout<<ns[i].w<<" ";
else cout<<ns[i].w;
}
return 0;
}