码迷,mamicode.com
首页 > 其他好文 > 详细

A1020. Tree Traversals (25)

时间:2015-03-06 00:57:57      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

A1020. Tree Traversals (25)

标签:

原文地址:http://www.cnblogs.com/ligen/p/4317050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!