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:72 3 1 5 7 6 41 2 3 4 5 6 7Sample Output:
4 1 6 3 5 7 2
根据后续遍历和中序遍历,求二叉树
#include#include #include #include #include #include #include using namespace std;typedef struct Tree{ int data; Tree *lchild; Tree *rchild;}a[40];int post[40];int in[40];int n;int ans[40];void dfs(int l1,int r1,int l2,int r2,Tree* &root){ root=new Tree(); int i; for( i=l1;i<=r1;i++) if(in[i]==post[r2]) break; root->data=post[r2]; if(i==l1) root->lchild=NULL; else dfs(l1,i-1,l2,l2+i-l1-1,root->lchild); if(i==r1) root->rchild=NULL; else dfs(i+1,r1,r2-(r1-i),r2-1,root->rchild);}int cnt;void bfs(Tree *tree){ queue q; q.push(tree); while(!q.empty()) { Tree *root=q.front(); q.pop(); ans[cnt++]=root->data; if(root->lchild!=NULL) q.push(root->lchild); if(root->rchild!=NULL) q.push(root->rchild); }}int main(){ while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&post[i]); for(int i=1;i<=n;i++) scanf("%d",&in[i]); Tree *tree; dfs(1,n,1,n,tree); cnt=0; bfs(tree); for(int i=0;i