020 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
作者: CHEN, Yue
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB
#include "iostream"
#include "queue"
using namespace std;
struct node{
int data;
node* lchild;
node* rchild;
};
node* create(int *postorder,int *inorder,int postL,int postR,int inL,int inR){
if (inL>inR) {
return NULL;
}
node* root=new node;
root->data=postorder[postR];
int i;
for (i=inL; i<inR; i++) {
if ( root->data==inorder[i]) {
break;
}
}
int left=i-inL;
int right=inR-i;
root->lchild=create(postorder,inorder,postL,postL+left-1,inL,inL+left-1);
root->rchild=create(postorder, inorder, postR-right, postR-1, inR-right+1, inR);
return root;
}
void LOT(node* root,int n){
queue<node*> q;
q.push(root);
for (int i=0; i<n; i++) {
node* current=q.front();
q.pop();
if (i==n-1) {
printf("%d",current->data);
}
else{
printf("%d ",current->data);
}
if (current->lchild!=NULL) {
q.push(current->lchild);
}
if (current->rchild!=NULL) {
q.push(current->rchild);
}
}
}
int main(){
int n;
scanf("%d",&n);
int postorder[n];
int inorder[n];
for (int i=0; i<n; i++) {
scanf("%d",&postorder[i]);
}
for (int i=0; i<n; i++) {
scanf("%d",&inorder[i]);
}
node* root=create(postorder, inorder, 0, n-1, 0, n-1);
LOT(root,n);
}