博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT 1138 Postorder Traversal [比较]
阅读量:5305 次
发布时间:2019-06-14

本文共 2430 字,大约阅读时间需要 8 分钟。

1138 Postorder Traversal (25 分)

Suppose that all the keys in a binary tree are distinct positive integers. Given the preorder and inorder traversal sequences, you are supposed to output the first number of the postorder 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 (≤ 50,000), the total number of nodes in the binary tree. The second line gives the preorder 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 first number of the postorder traversal sequence of the corresponding binary tree.

Sample Input:

71 2 3 4 5 6 72 3 1 5 4 7 6

Sample Output:

3

 题目大意:给出二叉树的前序和中序,输出后序遍历的第一个节点。

//这道题看似简单,但是容易超时。

#include 
#include
#include
using namespace std;vector
pre,in,post;void getPost(int inL,int inR,int preL,int preR){ if(inL>inR||post.size()!=0)return ; //if(preL>preR)return ; int i=0; while(in[i]!=pre[preL])i++; getPost(inL,i-1,preL+1,preL+i-inL); getPost(i+1,inR,preL+i-inL+1,preR); post.push_back(pre[preL]);}int main() { int n; cin>>n; int t; for(int i=0;i
>t; pre.push_back(t); } for(int i=0;i
>t; in.push_back(t); } getPost(0,n-1,0,n-1); cout<

 

//这样写取判断总有最后两个或者倒数第二个测试点过不去,运行超时。

//尝试想传递&引用,发现不行,报错:

\main.cpp|12|error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'|

 

改成以下之后,也就是将函数参数减少一个:

#include 
#include
#include
using namespace std;vector
pre,in,post;void getPost(int inL,int inR,int pr){ if(inL>inR||post.size()>0)return ; //if(preL>preR)return ; int i=0; while(in[i]!=pre[pr])i++; getPost(inL,i-1,pr+1); getPost(i+1,inR,pr+i-inL+1); post.push_back(pre[pr]);}int main() { int n; cin>>n; int t; for(int i=0;i
>t; pre.push_back(t); } for(int i=0;i
>t; in.push_back(t); } getPost(0,n-1,0); cout<

 

倒数第二个测试点超时。

//忽然想起,将i初始化时改为inL,然后就AC了!!!这样遍历的就少了。

主要问题就是i的初始化问题,一定要初始化为inL,修改之后第一个代码也过了,说明运行超时不是函数传参参数个数的问题。

转载于:https://www.cnblogs.com/BlueBlueSea/p/9984670.html

你可能感兴趣的文章
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
数据库的高级查询
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
Attribute(特性)与AOP
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>