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

PAT 1020. Tree Traversals

时间:2018-01-08 14:49:58      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:中序遍历   root   lin   tree   input   sequence   spec   ted   als   

PAT 1020. Tree Traversals

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<iostream>
#include<vector>
using namespace std;
vector<int> post,in,level(100000,-1);
void pre(int root,int s,int e,int index){
    if(s>e) return ;
    level[index]=post[root];
    int i=s;
    for(;i<=e;i++) 
    if(in[i]==post[root]) break;
    pre(root-(e-i+1),s,i-1,index*2+1);
    pre(root-1,i+1,e,index*2+2);
} 
int main(){
    int N; cin>>N;
    post.resize(N); in.resize(N);
    for(int i=0;i<N;i++) cin>>post[i];
    for(int i=0;i<N;i++) cin>>in[i];
    pre(N-1,0,N-1,0);
    for(int i=0;i<level.size();i++)
    if(level[i]!=-1)
    i>0?cout<<" "<<level[i]:cout<<level[i];
    return 0;
}

PAT 1020. Tree Traversals

标签:中序遍历   root   lin   tree   input   sequence   spec   ted   als   

原文地址:https://www.cnblogs.com/A-Little-Nut/p/8242199.html

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