完全二叉树的层序遍历 (25 分)
完美二叉树,就是完全二叉树,所有的叶子都集中在最下面两层,且叶子都尽量靠左。
完美二叉树的结点有很重要的性质。
当树的根节点从0开始:
对于每个根节点i,其左孩子编号为2i+1, 右孩子编号为2i+2;
当树的根节点从1开始,
对于每个根节点i,其左孩子编号为2i,右孩子编号为2i+1
所以这个题就应该模拟二叉树的后序遍历遍历,先遍历左子树,再右子树,再根节点。此时的根节点就应该是输入的根节点。
所以有了find函数
void find(int i)
{
if(i>n) return;
find(2*i);
find(2*i+1);
cin>>a[i];
}
//https://pintia.cn/problem-sets/994805046380707840/problems/1336215880692482058
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 31;
int a[N];
int n;
void find(int i)
{
if(i>n) return;
find(2*i);
find(2*i+1);
cin>>a[i];
}
int main()
{
cin>>n;
find(1);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
}