首先要注意这里是针对完全二叉树!
其他模板可以看看 https://www.acwing.com/blog/content/17291/
下面是题目(后序遍历)这是在pta上找的题目 完全二叉树的层序遍历
输入格式:
输入在第一行中给出正整数 N(≤30),即树中结点个数。第二行给出后序遍历序列,为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。
输出格式:
在一行中输出该树的层序遍历序列。所有数字都以 1 个空格分隔,行首尾不得有多余空格。
输入样例:
8
91 71 2 34 10 15 55 18
结尾无空行
输出样例:
18 34 55 71 2 10 15 91
结尾无空行
以下图中的完全二叉树为例:
前序遍历为:9 10 11 5 4 2 3 6
中序遍历: 5 11 10 4 9 3 2 6
后序遍历: 5 11 4 10 3 6 2 9
层序遍历: 9 10 2 11 4 3 6 5
代码
#include<iostream>
using namespace std;
int a[100],n;
void tree(int x)
{
if(x>n) return;
//按照题目所给的遍历方式递归,后序时就先递归左子树即x*2,然后右子树x*2+1,最后输入根节点
tree(x*2);
tree(x*2+1);
cin>>a[x];
}
int main()
{
scanf("%d",&n);
tree(1);//从根节点开始
for(int i=1;i<=n;i++)//层序遍历的结果直接输出数组即可
{
if(i>1) printf(" ");
printf("%d",a[i]);
}
}
结果
前序和中序同理,改一下tree函数里的三行位置就行