输入格式:
输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
输出样例:
4 1 6 3 5 7 2
题目详解:
#include<bits/stdc++.h>
using namespace std;
int n;
int c[31],b[31];// 后序,中序数组
struct node{
int bi;int ci;int l;//结点储存每个片段
};
queue<node>q;
void bfs(){
node nd;nd.bi=0,nd.ci=n-1;nd.l=n;
q.push(nd);
while(!q.empty()){
nd=q.front();
q.pop();
cout<<c[nd.ci]<<" ";
int k=0;
while(k<nd.l&&b[nd.bi+k]!=c[nd.ci])k++;
if(k>0){
node nd1;nd1.bi=nd.bi,nd1.ci=nd.ci-(nd.l-k);nd1.l=k;
q.push(nd1);
}//dfs(bi,ci-(l-k),k);
if(nd.l-k-1>0){
node nd1;
nd1.bi=nd.bi+k+1,nd1.ci=nd.ci-1;nd1.l=nd.l-k-1;q.push(nd1);
}//dfs(bi+k+1,ci-1,l-k-1);
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>c[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
bfs();
return 0;
}