给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数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 <cstdio>
- #include <cstring>
- #include <queue>
- #include <iostream>
- using namespace std;
- int tree[10000][2];
- int in[35],post[35];
- int BuildTree(int in[],int post[],int n){
- int i,node=post[n-1];
- for(i=0;i<n;i++){
- if(in[i]==node){
- break;
- }
- }
- if(i>0){
- tree[node][0]=BuildTree(in,post,i);
- }
- if(n-i-1>0){
- tree[node][1]=BuildTree(in+i+1,post+i,n-i-1);
- }
- return node;
- }
- void bfs(int fa){
- queue<int> q;
- q.push(fa);
- cout<<fa;
- while(!q.empty()){
- int head=q.front();
- q.pop();
- if(tree[head][0]){
- q.push(tree[head][0]);
- cout<<' '<<tree[head][0];
- }
- if(tree[head][1]){
- q.push(tree[head][1]);
- cout<<' '<<tree[head][1];
- }
- }
- return;
- }
- int main(){
- int fa,n;
- cin>>n;
- memset(tree,0,sizeof(tree));
- for(int i=0;i<n;i++){
- cin>>post[i];
- }
- for(int i=0;i<n;i++){
- cin>>in[i];
- }
- fa=BuildTree(in,post,n);
- bfs(fa);
- return 0;
- }