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

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

基本思路:
本道题是经典的二叉树遍历问题。首先根据后序遍历和中序遍历创建一个数组,随后开一个多维的vector数组。从二叉树的根结点开始dfs遍历。因为dfs遍历的时候,是从左往右的,所以同一深度的结点在vector[depth]里面一定是按照从左往右的顺序排列的。我们再看题目,不难发现从右边看二叉树实际上就是每个vector[deep]中最右边的结点,即vector[deep]中的最后一个元素;同理从左边看二叉树,每层看到的结点实际上是vector[deep]中的第一个元素。最后按照输出样例输出即可。

参考代码:

#include <iostream>
#include <vector>
using namespace std;
int n, hou[25], zhong[25];
struct tree{int data;tree *left,*right;
};tree* creat(int root, int begin, int end){if(end < begin)return NULL;tree *t = new tree();t->data = hou[root];int i;for(i = begin; hou[root] != zhong[i]; i++);t->left = creat(root-1-(end-i), begin, i-1);t->right = creat(root-1, i+1, end);return t;
}vector<int> v[105];
void dfs(tree* t, int level)
{if(t == NULL)return;level++;v[level].push_back(t -> data);if(t -> left)dfs(t -> left, level);if (t -> right)dfs(t -> right, level);
}int main(){scanf("%d", &n);for(int i = 0; i < n; i++)scanf("%d", &zhong[i]);for(int i = 0; i < n; i++)scanf("%d", &hou[i]);tree *t = creat(n-1, 0, n-1);dfs(t, 0);printf("R:");for(int i = 1; i <= 20; i++){if(v[i].size() == 0)break;printf(" %d", v[i][v[i].size()-1]);}printf("\nL:");for(int i = 1; i <= 20; i++){if(v[i].size() == 0)break;printf(" %d", v[i][0]);}printf("\n");return 0;
}

520 钻石争霸赛 7-8浪漫侧影(二叉树的遍历)相关推荐

  1. 520 钻石争霸赛 2021 7-8 浪漫侧影 (25 分)

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

  2. 520 钻石争霸赛 2023

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

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

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

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

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

  5. PTA 520 钻石争霸赛 2021

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

  6. 520 钻石争霸赛 2021

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

  7. 520 钻石争霸赛 题解

    说好的钻石难度,结果本人菜的一地..只有88分.... 文章目录 7-1 考试周 7-2 真的恭喜你 7-3 平均成绩 7-4 古风A+B 难度开始上升 7-5 猜近似数字 7-6 随机输一次 7-7 ...

  8. 【拼题A】 520 钻石争霸赛 2023 题解

    520-1 520无尽爱 分数 5 作者 陈越 单位 浙江大学 <I Love You 1000 Times>是 The Platters 于 2019 年演唱的歌曲.在 520 这个日子 ...

  9. 520 钻石争霸赛 2022(满分)

    前言 单身狗不就来刷刷题咯,今年比较简单 文章目录 前言 7-1 520表白 7-2 分糖豆 7-3 约会App 7-4 关于奇数的等式 7-5 我侬数 7-6 非诚勿扰 7-7 新式六合彩 7-8 ...

最新文章

  1. leetcode算法题--不同的二叉搜索树
  2. 近世代数--外直积--外直积是什么?关于阶的性质?
  3. BugkuCTF-MISC题红绿灯
  4. asp.net的几种页面间的传值方法
  5. 靠手速!华为新旗舰今晚发布:价格破万
  6. 用户空间与内核空间数据交换的方式(3)------seq_file
  7. 学习官方SSIS教程的错误总结
  8. 自己动手写iPhone wap浏览器之预备篇
  9. c语言修改pdf文件内容,PDF如何编辑,PDF文件怎么修改文字
  10. 最火的几颗国产视频芯片
  11. linux关机卡屏,Ubuntu关机卡住无法关机的解决方法
  12. C# MQTT(MQTTnet)客户端
  13. 消防工程师 第二篇 建筑防火 1.厂房和仓库的火灾危险性分类
  14. Socket传输字符串数组
  15. C语言中强制数据类型转换
  16. simon手册翻译_part1
  17. 计算机毕业设计(9)python毕设作品之校园失物招领系统
  18. TCP吞吐量的理论计算公式
  19. openwrt fota
  20. MyCobot六轴机械臂(五)--Myblockly拖拽式编程

热门文章

  1. oracle 导库时日志满了,oracle rac 11g 日志占满系统盘导致数据库down掉
  2. python远程执行shell 防止注入脚本_解决 window 上python远程执行shell paramiko 下令 Permission denied...
  3. php session缓存,扫盲:php session缓存至memcached中的方法
  4. 他解决了物理学千年争端,成就肩比牛顿、爱因斯坦,但却鲜有人知......
  5. 加州大学惊现神操作!物理教授用数学论文摆脱400美元交通罚单,却惨被网友大反转.........
  6. oracle中触发器只能用于表吗,Oracle触发器的分类和使用
  7. twitter mysql_twitter-mysql改进点
  8. arcgis xml 下载 切片_GIS开发:Arcgis的切片格式
  9. 幂等问题 vs 如何判断是否是4的幂
  10. HTML和css重要的知识点,html 和 css 基础知识点(一)(示例代码)