A1020. Tree Traversals (25)
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (<=30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.
Sample Input:
7 2 3 1 5 7 6 4 1 2 3 4 5 6 7
Sample Output:
4 1 6 3 5 7 2
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <iostream> 4 #include <string.h> 5 #include <math.h> 6 #include <algorithm> 7 #include <string> 8 #include <stack> 9 #include <queue> 10 using namespace std; 11 struct node{ 12 int data; 13 node * left; 14 node *right; 15 }; 16 const int maxn=50; 17 int in[maxn]; 18 int post[maxn]; 19 node * create(int a,int b,int c,int d) 20 { 21 if(a>b)return NULL; 22 node * newnode=new node; 23 newnode->data=post[b]; 24 //后序最后一个节点 25 int k=0; 26 for(;k+c<=d;k++) 27 { 28 if(in[k+c]==post[b]) 29 { 30 break; 31 } 32 } 33 newnode->left=create(a,a+k-1,c,c+k-1); 34 newnode->right=create(a+k,b-1,c+k+1,d); 35 return newnode; 36 } 37 int n; 38 int BFS(node * root ) 39 { 40 queue<node *> q; 41 int num=0; 42 q.push(root); 43 while(!q.empty()) 44 { 45 node * temp=q.front(); 46 q.pop(); 47 printf("%d",temp->data); 48 num++; 49 if(num<n)printf(" "); 50 if(temp->left!=NULL)q.push(temp->left); 51 if(temp->right!=NULL)q.push(temp->right); 52 } 53 } 54 55 int main(){ 56 57 scanf("%d",&n); 58 59 for(int i=0;i<n;i++) 60 { 61 scanf("%d",&post[i]); 62 } 63 for(int i=0;i<n;i++) 64 { 65 scanf("%d",&in[i]); 66 } 67 68 node * root=create(0,n-1,0,n-1); 69 BFS(root); 70 return 0; 71 }