PAT A1119 Pre- and Post-order Traversals

  • 到此为止终于把甲级上的这155道都摸了一遍,前后花了好长好长时间——我也不想这么慢,同样过这一生,比别人少做好多事。。。
  • 先序是根左右,后序是左右根,所以当一个节点只有左子树或只有右子树的时候,两人都不清楚到底是左子树还是右子树——so不能唯一确定
  • 本题的想法是走跟之前正常建树一样的流程:一个序列提供根节点,另一个序列定位,然后划分左右子树。不同的是这里要提供的根节点是当前序列【左子树的根节点】(if没有左子树,那个位置就是右子树的根节点,反正没法分辨,所以假设是左子树即可),而之前用中序建树是提供当前序列的根节点
  • 在这里特别注意,build右子树时传入的参照同样应该是这个右子树的【左子树的根节点】,即先序中右子树根节点的下一个位置,不注意容易习惯性传右子树根节点
  • 在只做了上面传参改动的情况下会发现当递归到序列只有一个节点的时候,由于int pos = postL; pos以postL为下界,那么往下build左子树时这个为1的长度就会一直被保留,无法结束。所以在前面加了个if滤掉这种情况。之后看到更优美的方法再改
  • 如上所述,判断是否唯一就看有没有节点只有单个子树。我这里由于优先build左子树,所以实际上只可能存在(postorder[postR].right == -1 && postorder[postR].left != -1)的情况
  • 最后一行换行,否则格式错误。。。
#include<iostream>
#include<vector>using namespace std;struct Node{int data,left,right;
};
vector<Node> postorder;
vector<int> preorder;
int N,cnt = 0;bool flag = true;
int build(int root,int postL,int postR){if(postL > postR) return -1;if(postL == postR){postorder[postR].left = -1;postorder[postR].right = -1;return postR;}int pos = postL;while(postorder[pos].data != preorder[root]) pos ++;postorder[postR].left = build(root + 1,postL,pos);postorder[postR].right = build(root + 1 + pos - postL + 1,pos + 1,postR - 1);if((postorder[postR].left == -1 && postorder[postR].right != -1)|| (postorder[postR].right == -1 && postorder[postR].left != -1)) flag = false;return postR;
}void inorder(int root){if(postorder[root].left != -1) inorder(postorder[root].left);cout << postorder[root].data;cnt ++;if(cnt != N) cout << ' ';else cout << '\n';if(postorder[root].right != -1) inorder(postorder[root].right);
}int main(){cin >> N;preorder.resize(N);postorder.resize(N);for(int i = 0;i < N;i ++) cin >> preorder[i];for(int i = 0;i < N;i ++) cin >> postorder[i].data;int root = build(1,0,N - 1);if(flag) cout << "Yes\n";else cout << "No\n";inorder(root);return 0;
}

PAT A1119 Pre- and Post-order Traversals ——小楼一夜听春雨,深巷明朝卖杏花相关推荐

  1. PAT A1119 Pre- and Post-order Traversals

    1119 Pre- and Post-order Traversals 分数 30 作者 CHEN, Yue 单位 浙江大学 Suppose that all the keys in a binary ...

  2. 【PAT甲级】1146 Topological Order

    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343

  3. 初中晨读必看古诗名句

    初中晨读必看古诗名句[篇一] 1.笔落惊风雨,诗成泣鬼神.(唐•杜甫•寄本十二白二十) 2.墙头雨细垂纤草,水面风回聚落花. -- 张蠙<夏日题老将林亭> 3.流连戏蝶时时舞,自在娇莺恰恰 ...

  4. js之dom操作练习 ---- js篇

    一.自动计数器 <html> <head> <script type="text/javascript"> var c=0 var t func ...

  5. 北大青鸟 JQuery制作特效 第二章 (上机练习

    北大青鸟 JQuery制作特效 第二章 (上机练习 练习一丶制作简易的当当购物车页面 <!DOCTYPE html> <html> <head lang="en ...

  6. 语文(文学)类智力竞赛题荟萃

    低级题 1.<西游记>中的火焰山是今天的:A.吐鲁番盆地 2.吴敬梓是哪一部名著的作者:B.<儒林外史> 3.宋代的代表性刑罚是:A.刺配 4.维纳斯是罗马神话中的:A.智慧女 ...

  7. Kubernetes kubeconfig配置文件

    因为部署的jenkins和k8s不在同一台服务器,且不能ssh过去,运维朋友告诉我,可以把配置文件移动过去,在安装kubectl就能执行了,下面就简单描述一下原因. 在node节点上可以执行kubec ...

  8. 【渝粤题库】国家开放大学2021春2410中国古代文学(B)(2)题目

    试卷代号:2410 2021年春季学期期末统一考试 中国古代文学(B)(2) 试题(开卷) 2021年7月 一.填空(每空1分,共20分) 1."疏影横斜水清浅,暗香浮动月黄昏"是 ...

  9. 槛外人看NLP : 从古典诗词说到词语的色香味

    周锡令 xlzhou0421@vip.sina.com 为什么古典诗词受到人们的喜爱? 很多人都喜欢中国的古典诗词.可是在幼儿园和小学里只听说让小学生背唐诗,从来没有要他们读宋词的.这是什么原因呢? ...

  10. JavaScript操作BOM对象

    window对象 浏览器对象模型(BOM)是JavaScript的组成之一 ,它提供了独立于内容与浏览器窗口进行交互的对象,使用浏览器对象模型可以实现与HTML的交互.它的作用是将相关的元素组织包装起 ...

最新文章

  1. Java学习day_012(OOP):抽象类、接口和内部类(上)
  2. Java+Windows+ffmpeg实现视频转换
  3. php到期自动过期,PHP实现页面长时间无操作,自动过期函数
  4. 推荐系统入门必读论文
  5. 【GBK、UTF-8、ISO8859-1】三种编码方式总结及实例
  6. js 表单设计器_准备迎接Vue3,使用Vue Composition API生成干净可扩展的表单
  7. 如何更优雅地切换Git分支
  8. 第二章 HTML5存储 JSON格式
  9. 用动态规划解小朋友分糖问题
  10. ScheduledExecutorService 延迟 / 周期执行线程池
  11. 招聘senior.net software engineer
  12. 情人节--我们依旧单身(制作属于自己的QQ拼音皮肤)(带全部ps素材)
  13. jquery 时间选择插件-jedate
  14. android actionbar setCustomView时布局整体右移解决方案
  15. windows10网络共享及重启后失效的解决办法
  16. 花1分钟用Word手动绘制流程图,看完我学会了!
  17. UserData使用总结[转载-lanyu]
  18. CentOS 单机安装Zookeeper-3.4.13
  19. 关于以太坊ERC-20通证智能合约协议
  20. Maven配置nexus私服地址

热门文章

  1. 004--MySql数据库的淘宝商城数据库设计
  2. php实现图片去除水印,PHP实现水印图片
  3. 【笔记】Python脚本:绘制表格转为图片发送
  4. pyqt5 python qlineedit信号_PyQt5实现QLineEdit添加clicked信号的方法
  5. usb打印机linux识别不了怎么办,打印机usb连接电脑无法识别怎么办_打印机usb插上无响应怎么办-win7之家...
  6. 月薪3k能买到什么样的房子,看到结果后,我裂开了。。。
  7. CodeForces - 1384
  8. 印度互联网创业大热:会出现“下一个苹果”?
  9. linux 两台设备网桥配置6,linux2.6内核网桥分析
  10. 异常声音检测之kaldi DNN 训练