L2-3 完全二叉树的层序遍历 (25 分)
这道题是2020年天梯赛的题,之前补过一次但是这一次又没有打出来,之前补的那个方法太麻烦了,这次换一个简单的方法补题
思路:
由于完全二叉树是完美二叉树的一部分,所以可以通过点的数量先构架出一个完全二叉树,然后在把数值一一填入,构成一个完整的二叉树
(从网上看的大佬的思路,真的很巧妙)
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int data;
int l,r;
};
Node node[100];
//把创建好的二叉树框架把数填入
void cread(int i)
{
if(node[i].l!=0)
{
cread(node[i].l);
}
if(node[i].r!=0)
{
cread(node[i].r);
}
cin>>node[i].data;
}
int main()
{
int n;
cin>>n;
//先通过点的数量和完美二叉树的性质
//构造出完全二叉树的雏形if
//保证在n之内
for(int i=1;i<n;i++)
{
if(i*2<=n)
{
node[i].l=i*2;
}
if(i*2+1<n)
{
node[i].r=i*2+1;
}
}
cread(1);
cout<<node[1].data;
for(int i=2;i<=n;i++)
{
cout<<" "<<node[i].data;
}
}