给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
1. 7 2. 2 3 1 5 7 6 4 3. 1 2 3 4 5 6 7
结尾无空行
输出样例:
4 1 6 3 5 7 2
结尾无空行
思路:根据题意建树,然后遍历
#include<iostream> #include<queue> using namespace std; typedef struct node *tree; struct node{ tree left,right; int data; }; int a[40],b[40],n; tree build(int a[],int b[],int len)//根据后序和中序建树过程 { if(!len) return NULL;//空树 int i; for(i=0;i<len;i++) if(b[i]==a[len-1]) break;//找到中序的根节点 tree t=(tree)new(tree);//创建一个节点 t->data=a[len-1];//根 t->left=build(a,b,i);//左 t->right=build(a+i,b+i+1,len-i-1);//右 return t; } int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) cin>>b[i]; tree t=build(a,b,n); queue<tree>q; q.push(t); int f=0; while(!q.empty())//层次遍历 { tree x=q.front(); q.pop(); if(f++) cout<<' ';//控制空格 cout<<x->data; if(x->left) q.push(x->left); if(x->right) q.push(x->right); } return 0; }