L2-006. 树的遍历

来源:互联网 发布:吕鑫讲的c语言咋样 编辑:程序博客网 时间:2024/06/01 22:06

L2-006. 树的遍历

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:
72 3 1 5 7 6 41 2 3 4 5 6 7
输出样例:
4 1 6 3 5 7 2
#include<iostream>#include<queue>using namespace std;#define N 50struct node{  int date;  node* l;  node* r;};int post[N],in[N];int n;node* create(int postL,int postR,int inL,int inR){  if(postL>postR) return NULL;        node* root = new node;    root->date = post[postR];        int k;    for(k=inL;k<=inR;k++){      if(in[k]==post[postR])      break;    }        int numLeft = k-inL;        root->l =create(postL,postL+numLeft-1,inL,k-1);    root->r = create(postL+numLeft,postR-1,k+1,inR);    return root;}int flag=0;void bfs(node* root){  queue<node*> q;  q.push(root);  while(q.size()){    node* now =q.front();    q.pop();    if(flag)cout<<" "<<now->date;    else{      cout<<now->date;      flag=1;    }    if(now->l!=NULL) q.push(now->l);    if(now->r!=NULL) q.push(now->r);  }}int main(){  cin>>n;  int i;  for(i=0;i<n;i++)  cin>>post[i];  for(i=0;i<n;i++)  cin>>in[i];  node* root = create(0,n-1,0,n-1);  bfs(root);}

原创粉丝点击