题意:

输入一个正整数N(<=30),接着输入两行N个正整数第一行为先序遍历,第二行为后续遍历。输出是否可以构造一棵唯一的二叉树并输出其中一颗二叉树的中序遍历。

trick:

输出完毕中序遍历后须换行,否则所有测试点格式错误。

 #define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int pre[],post[];
map<int,int>mp;
int flag;
vector<int>ans;
void dfs(int prel,int prer,int postl,int postr){//先序遍历起点,先序遍历终点,后序遍历起点,后序遍历终点
if(prel==prer){//根节点
ans.emplace_back(pre[prel]);
return ;
}
int x=mp[post[postr-]];//找到后序遍历中根节点前一个结点在先序遍历中的位置,这个结点即为右子树的根节点
if(x-prel>){//存在左子树
dfs(prel+,x-,postl,postl+x-prel-);//划分左子树
//先序遍历中:左子树起点为去掉根节点,左子树终点为先序遍历中右子树根节点前一个结点;
//后序遍历中:左子树起点不变,左子树终点为起点加上先序遍历中终点和起点的差
ans.emplace_back(pre[prel]);//左子树的根节点
dfs(x,prer,postl+x-prel-+,postr-);//划分右子树
//先序遍历中:右子树起点为x,右子树终点为最后一个结点;
//后序遍历中:右子树起点为左子树终点+1,右子树终点为去掉根节点
}
else{//不存在左子树,那么这个结点可以作为左右结点任一,构造结果因此不唯一
flag=;//标记
ans.emplace_back(pre[prel]);//子树的根节点
dfs(x,prer,postl+x-prel-+,postr-);//把剩余结点当作右子树,处理方法和划分右子树相同
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin>>n;
for(int i=;i<=n;++i){
cin>>pre[i];
mp[pre[i]]=i;//记录点序号在先序遍历中出现的位置
}
for(int i=;i<=n;++i)
cin>>post[i];
dfs(,n,,n);//对先序遍历进行分割
if(flag==)
cout<<"Yes\n";
else
cout<<"No\n";
cout<<ans[];
for(int i=;i<ans.size();++i)
cout<<" "<<ans[i];
cout<<"\n";
return ;
}

【PAT甲级】1119 Pre- and Post-order Traversals (30分)(已知先序后序输出是否二叉树唯一并输出中序遍历)的更多相关文章

  1. PAT甲级:1064 Complete Binary Search Tree (30分)

    PAT甲级:1064 Complete Binary Search Tree (30分) 题干 A Binary Search Tree (BST) is recursively defined as ...

  2. 【PAT甲级】1064 Complete Binary Search Tree (30 分)

    题意:输入一个正整数N(<=1000),接着输入N个非负整数(<=2000),输出完全二叉树的层次遍历. AAAAAccepted code: #define HAVE_STRUCT_TI ...

  3. 【PAT甲级】1053 Path of Equal Weight (30 分)(DFS)

    题意: 输入三个正整数N,M,S(N<=100,M<N,S<=2^30)分别代表数的结点个数,非叶子结点个数和需要查询的值,接下来输入N个正整数(<1000)代表每个结点的权重 ...

  4. 【PAT甲级】1038 Recover the Smallest Number (30 分)

    题意: 输入一个正整数N(<=10000),接下来输入N个字符串,每个字符串包括至多8个字符,均为数字0~9.输出由这些字符串连接而成的最小数字(不输出前导零). trick: 数据点0只包含没 ...

  5. 【PAT甲级】1034 Head of a Gang (30 分)

    题意: 输入两个正整数N和K(<=1000),接下来输入N行数据,每行包括两个人由三个大写字母组成的ID,以及两人通话的时间.输出团伙的个数(相互间通过电话的人数>=3),以及按照字典序输 ...

  6. PAT甲级1119. Pre- and Post-order Traversals

    PAT甲级1119. Pre- and Post-order Traversals 题意: 假设二叉树中的所有键都是不同的正整数.一个唯一的二进制树可以通过给定的一对后序和顺序遍历序列来确定,也可以通 ...

  7. PAT甲级:1124 Raffle for Weibo Followers (20分)

    PAT甲级:1124 Raffle for Weibo Followers (20分) 题干 John got a full mark on PAT. He was so happy that he ...

  8. PAT甲级:1066 Root of AVL Tree (25分)

    PAT甲级:1066 Root of AVL Tree (25分) 题干 An AVL tree is a self-balancing binary search tree. In an AVL t ...

  9. pat 甲级 1099. Build A Binary Search Tree (30)

    1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

随机推荐

  1. setter&getter

    let _age = 4 class Animal { construct (type){ this.type = type } get age(){ return _age } set age(va ...

  2. 静态库&动态库&导入库

    我遇到的问题 先贴一个StackOverflow上的问题 上面的问题让我知道了更多动态库的知识. 我需要使用一个声音库(irrKlang)为2d游戏提供声音,我使用的编译器是mingw-w64,但是i ...

  3. 开启WIndows10 未经身份验证的来宾访问策略以及SMB1

    打开记事本编辑保存至.vbs 以管理员身份运行 Set obj = createobject("wscript.shell") obj.run ("reg add HKL ...

  4. JavaSE学习笔记(13)---线程池、Lambda表达式

    JavaSE学习笔记(13)---线程池.Lambda表达式 1.等待唤醒机制 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用 ...

  5. 【Git】git使用 - rebase的使用

    官方参考指南: Pro Git Book v2, § rebasing. English Pro Git Book v2, § rebase:衍合. 中文版 (建议还是看一下英文原版,就当熟练英语.) ...

  6. [CF1311D] Three Integers - 数学

    Solution 枚举 \(a\),枚举 \(b\ s.t. a|b\),则 \(c\) 一定是 \([c/b]b\) 或 \(([c/b]+1)b\) #include <bits/stdc+ ...

  7. 【database】复制表数据到相同备份表

    目的及由来,因为数据库表都采取逻辑删除isDeleted=true/flase,但是之前有些报表或者其他的sql并没有在sql中指明此条件.为了不影响之前代码,所以: 1.数据库中创建一张相同的表,把 ...

  8. 2、Hdfs架构设计与原理分析

    文章目录 1.Hadoop架构 2.HDFS体系架构 2.1NameNode 2.1.1元数据信息 2.1.2NameNode文件操作 2.1.3NameNode副本 2.1.4NameNode心跳机 ...

  9. 2020.01.19【NOIP提高组】模拟比赛-1.水池,2.数字排序,3.球星,4.钻石交易 总结反思

    水池 比赛时 我最讨厌这种数学类题了,我首先想到了这几种情况,设\(jl[][]\)表示两点之间弧的距离,从F到G可以由 F->G F->B->A->G F->A-> ...

  10. simmon effect : build the funcion of trail list

    #the real experiment for simon effect #load the library which is our need import pygame import sys i ...