• PAT 1020. Tree Traversals


    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;
    }
    
  • 相关阅读:
    你的灯亮着吗随笔2
    好搜--评价
    水王ID
    回溯算法
    贪心算法
    动态规划问题
    环境安装注意事项
    好用的idea插件记录
    软件工程项目冲刺阶段二:第七天
    软件工程项目冲刺阶段二:第六天
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/8242199.html
Copyright © 2020-2023  润新知