1020 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
中序,后序构建二叉树,再层序遍历(构建二叉树都快写不出来了 尴尬)
#include<bits/stdc++.h>
using namespace std;
struct node{
int num;
struct node* lc;
struct node* rc;
};
int post[31],in[31];
struct node* init(int l, int r, int pl, int pr){
if(l > r)
return nullptr;
int v = 0,rr = post[pr];
for(int i = l; i <= r; i ++){
if(in[i] == rr){
v = i;
break;
}
}
struct node* root = new node;
root->num = rr;
int leftnum = v - l;
root->lc = init(l,v-1,pl,pl + leftnum -1);
root->rc = init(v+1,r,pl + leftnum,pr-1);
return root;
}
int main(){
int n;
cin >> n;
for(int i = 0; i < n; i ++){
cin >> post[i];
}
for(int i = 0; i < n; i ++){
cin >> in[i];
}
struct node* root = init(0,n-1,0,n-1);
queue<node*> q;
cout << root->num;
q.push(root->lc);
q.push(root->rc);
while(!q.empty()){
struct node* now = q.front();
q.pop();
if(now == nullptr)
continue;
cout << " " << now->num;
q.push(now->lc);
q.push(now->rc);
}
return 0;
}