后序遍历:左->右->根,把树存在数组里,如果根节点是u那么他的做儿子就是u*2,右儿子就是u*2+1,完全二叉树存在右儿子就一定存在左儿子,但是存在左儿子不一定存在右儿子,刚好我们的数组也满足这个条件,及可能有u*2(左儿子),但是没有u*2+1(右儿子);但是如果有u*2+1(右儿子)就一定有u*2(左儿子)。
#include <bits/stdc++.h>
using namespace std;
int tree[110];
int n;
void creat(int u)
{
if(u>n)
return;
creat(u*2);
creat(u*2+1);
cin>>tree[u];
return;
}
int main()
{
int i;
cin>>n;
creat(1);
for(i=1; i<=n-1; i++)
printf("%d ",tree[i]);
printf("%d\n",tree[i]);
return 0;
}