题目描述

“侧影”就是从左侧或者右侧去观察物体所看到的内容。例如上图中男生的侧影是从他右侧看过去的样子,叫“右视图”;女生的侧影是从她左侧看过去的样子,叫“左视图”。520 这个日子还在打比赛的你,也就抱着一棵二叉树左看看右看看了……我们将二叉树的“侧影”定义为从一侧能看到的所有结点从上到下形成的序列。例如下图这棵二叉树,其右视图就是 { 1, 2, 3, 4, 5 },左视图就是 { 1, 6, 7, 8, 5 }。

于是让我们首先通过一棵二叉树的中序遍历序列和后序遍历序列构建出一棵树,然后你要输出这棵树的左视图和右视图。

输入格式:

输入第一行给出一个正整数 N (≤20),为树中的结点个数。随后在两行中先后给出树的中序遍历和后序遍历序列。树中所有键值都不相同,其数值大小无关紧要,都不超过 int 的范围。

输出格式:

第一行输出右视图,第二行输出左视图,格式如样例所示。

输入样例:

8
6 8 7 4 5 1 3 2
8 5 4 7 6 3 2 1

输出样例:

R: 1 2 3 4 5
L: 1 6 7 8 5

解题思路:

  1. 本题和树的遍历的解题思路一样,根据一棵树的中序遍历和后序遍历求树的层序遍历的序列,只需输出每层第一个节点和最后一个节点。
  2. 根据中序遍历和后序遍历能够唯一的确定一棵树。首先在后序遍历中找出最后一个节点就是树的根节点,再从中序遍历找出根节点,左右两边分别是该节点的左子树和右子树,以此递归即可。
  3. 层序遍历数据使用STL中的deque记录,使用 deque.front()deque.back() 即可输出队列中的首尾数据。
  4. 递归子树需要找到子树的根节点左子树为root - right + i - 1,右子树为root - 1

代码:

#include <bits/stdc++.h>
using namespace std;const int MAXN = 35;
const int INF = 0x3f3f3f3f;int n, maxlevel;
int in[MAXN], post[MAXN];   //存储中序遍历、后续遍历
deque<int> level[MAXN];       //存储层序遍历void travel(int root, int left, int right, int deep)
{//root 当前根节点 if(left > right){return ;}int i = left;while(i <= right && in[i] != post[root]){//找到中序遍历中的根节点i ++;}maxlevel = max(deep, maxlevel);level[deep].push_back(post[root]);travel(root - right + i - 1, left, i - 1, deep + 1);    //遍历左子树travel(root - 1, i + 1, right, deep + 1);              //遍历右子树
}int main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> n;for(int i = 0;i < n;i ++){cin >> in[i];}for(int i = 0;i < n;i ++){cin >> post[i];}maxlevel = 0;    //记录最大深度travel(n - 1, 0, n - 1, 1);cout << "R:";for(int i = 1;i <= maxlevel;i ++){cout << " " << level[i].back();}cout << endl << "L:";for(int i = 1;i <= maxlevel;i ++){cout << " " << level[i].front();}return 0;
}

520 钻石争霸赛 2021 7-8 浪漫侧影 (25 分)相关推荐

  1. 520 钻石争霸赛 2021 PTA 1-6题

    520 钻石争霸赛 2021 PTA 7-1 自动编程 (5 分) 7-2 加油冲鸭 (10 分) 7-3 520的表白 (10 分) 7-4 奇葩楼层 (15 分) 7-5 大勾股定理 (15 分) ...

  2. 【PTA】520 钻石争霸赛 2021,119分

    序 大概写了30mins多点,后来有事情去了就溜了没打完 勾股定理最后一个点WA了少了1分,错误数据是1e4大概暴力T了,不过没时间改了 7-1 自动编程 (5 分) 7-1 自动编程 (5 分) 输 ...

  3. PTA 520 钻石争霸赛 2021

    有一道题没来得及做,目前的排名是57,不知道后面会被挤到哪里. 文章目录 7-1 自动编程 (5 分) 7-2 加油冲鸭 (10 分) 7-3 520的表白 (10 分) 7-4 奇葩楼层 (15 分 ...

  4. 520 钻石争霸赛 2021

    文章目录 7-1 自动编程 (5 分) 输入格式: 输出格式: 输入样例: 输出样例: Code 7-2 加油冲鸭 (10 分) 输入格式: 输出格式: 输入样例 1: 输出样例 1: 输入样例 2: ...

  5. PAT 520 钻石争霸赛 2021 118分题解(满分120)

    序: 为了锻炼自己的编程水平,参加了此次520的编程比赛,因此没有好好准备520礼物(大哭.png),下次520练习赛再也不参加了,还是npy更重要.但不过这次既然参加了,就总结一下吧.这次总分118 ...

  6. 520 钻石争霸赛 2021 7-7 约会大作战

    7-7 约会大作战 题目 某社团开展了一个"快闪"相亲活动,活动规则如下: (1)社团负责人将所有人分为两组,并收集了每个人对另外一组的所有人的好感度: (2)然后社团负责人会随机 ...

  7. 7-8 浪漫侧影 (25 分)

    "侧影"就是从左侧或者右侧去观察物体所看到的内容.例如上图中男生的侧影是从他右侧看过去的样子,叫"右视图":女生的侧影是从她左侧看过去的样子,叫"左视 ...

  8. 520 钻石争霸赛 2023

    活动链接 520 钻石争霸赛 2023 520-1 520无尽爱 520-2 心动指数 520-3 不要怕,爱! 520-4 天生一对 520-5 翻倒数 520-6 情侣数 520-7 撒狗粮 52 ...

  9. 520 钻石争霸赛 7-8浪漫侧影(二叉树的遍历)

    "侧影"就是从左侧或者右侧去观察物体所看到的内容.例如上图中男生的侧影是从他右侧看过去的样子,叫"右视图":女生的侧影是从她左侧看过去的样子,叫"左视 ...

最新文章

  1. linux字符cdev和Inode的关系
  2. 老生常谈session,cookie的区别,安全性
  3. 学习:java原理—反射机制
  4. Idea导入maven工程,并运行
  5. linux32位运行64位程序,32位windows下可以运行的程序在64位linux下报错
  6. mysql 索引 insert_mysql优化:定期删数据 + 批量insert + 字符串加索引为什么很傻
  7. 【BZOJ 4503】4503: 两个串 (FFT)
  8. 网络安全——钓鱼邮件和网站克隆
  9. Linux服务器如何修改登录用户的密码
  10. 一次安装IE11浏览器的经历
  11. 羽素玩转开学季,1000份豪礼相送
  12. BCJC:62:计算机体系之灵魂→OS→目标文件
  13. MS13-046特权提升漏洞(转)
  14. Star CCM+ 案例 - 旋风分离器 (cyclone separator)-2 生成网格
  15. 软件项目需求调研过程
  16. STM32CUBEIDE小技巧: Bookmark 书签
  17. rocksdb和spdk
  18. 2022年全球市场切削刀具总体规模、主要生产商、主要地区、产品和应用细分研究报告
  19. 美团点评2020校招笔试练习
  20. Port Forwarding(端口转发)简单介绍

热门文章

  1. Theil-Sen Median斜率估计和Mann-Kendall趋势分析:以多年NPP数据为例
  2. 牛客小白月赛24 J—建设道路
  3. 申报市级瞪羚企业应具备的基本条件
  4. HTML中利用JS调用PHP (以登录为例)
  5. 亚马逊云科技的区域和可用区概念解释
  6. 刚刚,京东推出“小京鱼”平台和五款智能新品,全面押注IoT
  7. Java毕设项目共享充电宝系统(java+VUE+Mybatis+Maven+Mysql)
  8. gitlab备份与恢复
  9. python处理实验数据,Python在热敏电阻测量实验数据处理中的应用
  10. virtualbox给CentOS7虚拟机磁盘扩容