news 2026/2/3 2:37:28

PAT 1119 Pre- and Post-order Traversals

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PAT 1119 Pre- and Post-order Traversals



这一题的大意是说给出前序遍历和后序遍历,让我们找是否构造一个唯一的二叉树,
如果可以返回Yes,并输出中序遍历序列,如果不可以,那么就是输出No,并输出其中一种情况的中序遍历序列。
我们都知道通过前序和后序是无法确定一棵二叉树的,因为我们无法确定左子树和右子树分别是哪些,它不像中序遍历+后序遍历一样,可以找到根节点后,通过根节点把左右子树分开,而前序和后序是无法实现的,我们无法确定哪些是左子树,哪些是右子树。
因此,我们要假设某一个节点(前序节点中根节点的后面的那一个节点)是左子树,用这种方法来建树,如果在建树的过程中如果存在前序遍历的左子树和后序遍历的右子树相等(也就是后序遍历根节点的前一个节点和前序遍历的根节点的后一个节点相同。)如果一样,说明不能构成唯一的序列,因为后序遍历根节点的前一个节点和前序遍历的根节点的后一个节点相同说明这个节点充当左子树和充当右子树是一样的。因此不唯一。
我们通过遍历序列来建树的方法是有套路的:

boolflag=1;//假设为一node*build(intprestart,intpreend,intpoststart,intpostend){if(prestart>preend){returnnullptr;}if(prestart==preend){//为啥在只有一个节点的时候不能继续往下划分node*root=new(node);root->data=pre[prestart];root->l=nullptr;root->r=nullptr;returnroot;}node*root=new(node);root->data=pre[prestart];root->l=nullptr;root->r=nullptr;intx=pre[prestart+1];//左子树的根节点if(pre[prestart+1]==post[postend-1]){flag=0;}intindex;for(inti=poststart;i<=postend;i++){if(post[i]==x){index=i;break;}}intlen=index-poststart+1;//这就是左子树的长度root->l=build(prestart+1,prestart+1+len-1,poststart,poststart+len-1);root->r=build(prestart+1+len,preend,poststart+len,postend-1);returnroot;}

这与之前的前序+中序/中序+后序建树的方法不同的是:

if(prestart==preend){node*root=new(node);root->data=pre[prestart];root->l=nullptr;root->r=nullptr;returnroot;}

当子树只有一个节点的时候,我们需要特判直接返回。
为什么?因为在后面建树的时候:

intx=pre[prestart+1];//左子树的根节点

这里很明显越界了,往后的遍历也会出错,后面在递归划分左右子树也是错的,因此我们要在只有一个节点的时候特判返回
其他和中序+后序建树是类似的。
可以看一下这篇博客:

PAT 1020 Tree Traversals

因此这一题的完整代码就如下啦:

#include<bits/stdc++.h>#include<iostream>usingnamespacestd;intN;vector<int>pre;vector<int>post;structnode{intdata;structnode*l;structnode*r;};boolflag=1;//假设为一node*build(intprestart,intpreend,intpoststart,intpostend){if(prestart>preend){returnnullptr;}if(prestart==preend){//为啥在只有一个节点的时候不能继续往下划分node*root=new(node);root->data=pre[prestart];root->l=nullptr;root->r=nullptr;returnroot;}node*root=new(node);root->data=pre[prestart];root->l=nullptr;root->r=nullptr;intx=pre[prestart+1];//左子树的根节点if(pre[prestart+1]==post[postend-1]){flag=0;}intindex;for(inti=poststart;i<=postend;i++){if(post[i]==x){index=i;break;}}intlen=index-poststart+1;//这就是左子树的长度root->l=build(prestart+1,prestart+1+len-1,poststart,poststart+len-1);root->r=build(prestart+1+len,preend,poststart+len,postend-1);returnroot;}boolf=0;voidinorder(node*root){if(root->l!=nullptr)inorder(root->l);if(root!=nullptr){if(f==0){cout<<root->data;f=1;}elsecout<<" "<<root->data;}if(root->r!=nullptr)inorder(root->r);}intmain(){intN;cin>>N;for(inti=0;i<N;i++){intx;cin>>x;pre.push_back(x);}for(inti=0;i<N;i++){intx;cin>>x;post.push_back(x);}node*root=build(0,N-1,0,N-1);//cout<<"1"<<endl;if(flag==1){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}inorder(root);cout<<endl;return0;}

注意:在最后的中序遍历后要加一个换行,否则会报格式错误。
总结:这一题仍是典型的根据遍历序列来建树,唯一不同的时候我们要假设左子树是哪些节点。因为只知道前序遍历和后序遍历序列是无法构成唯一的二叉树的。我们要根据题意判断建成的树是否唯一。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/24 15:29:16

Langchain-Chatchat问答准确率提升的关键配置参数

Langchain-Chatchat问答准确率提升的关键配置参数 在企业知识管理日益智能化的今天&#xff0c;一个常见却棘手的问题浮出水面&#xff1a;如何让大语言模型真正“懂”你的公司文档&#xff1f;许多团队尝试部署本地问答系统时发现&#xff0c;模型明明读了上百页制度文件&…

作者头像 李华
网站建设 2026/1/26 1:54:30

Langchain-Chatchat问答系统灰度期间知识库版本回退

Langchain-Chatchat问答系统灰度期间知识库版本回退 在企业智能服务逐步落地的过程中&#xff0c;一个常见的挑战浮现出来&#xff1a;当我们在灰度环境中更新了知识库后&#xff0c;用户反馈却开始增多——原本准确的回答变得模糊甚至错误。这种“上线即出错”的窘境&#xff…

作者头像 李华
网站建设 2026/1/31 16:16:41

契约测试:破解微服务集成测试困境的利器

1 微服务集成的现实挑战 在微服务架构成为主流的今天&#xff0c;软件测试从业者面临着前所未有的集成测试复杂性。每个微服务独立开发、部署和演进&#xff0c;这种自治性在带来灵活性的同时&#xff0c;也制造了棘手的集成问题&#xff1a; 测试环境脆弱性&#xff1a;传统的…

作者头像 李华
网站建设 2026/1/31 19:00:37

Perf测试翻车现场:说说我的“压压测”辛酸史

作为一名软件测试工程师&#xff0c;性能测试&#xff08;Perf Test&#xff09;本应是保障系统稳定性的“守门员”&#xff0c;但在我的职业生涯中&#xff0c;它更像是一场场惊心动魄的“事故现场回放”。今天&#xff0c;我想和大家分享几个真实的压测翻车案例&#xff0c;希…

作者头像 李华
网站建设 2026/2/2 2:10:33

【实战】GEO 搜索优化系统源码搭建与 iOS 端发布功能开发全攻略

在本地生活、外卖、出行、社交等 APP 场景中&#xff0c;GEO&#xff08;地理信息&#xff09;搜索是核心功能之一 —— 用户通过定位获取附近的商户、活动、好友等信息&#xff0c;其体验直接取决于 GEO 搜索的性能和准确性。传统的数据库经纬度模糊查询存在效率低、结果偏差大…

作者头像 李华
网站建设 2026/1/29 12:52:24

Wayve最近的GAIA-3分享:全面扩展世界模型的评测能力......

作者 | Feynman 编辑 | 自动驾驶之心原文链接&#xff1a;https://zhuanlan.zhihu.com/p/1979144898872627828 点击下方卡片&#xff0c;关注“自动驾驶之心”公众号戳我-> 领取自动驾驶近30个方向学习路线>>自动驾驶前沿信息获取→自动驾驶之心知识星球本文只做学术分…

作者头像 李华