时间限制: 1 Sec内存限制: 128 MB提交: 558解决: 139
提交状态
题目描述
给一棵二叉树的层序遍历序列和中序遍历序列,求这棵二叉树的先序遍历序列和后序遍历序列,并给出从右往左、从右上往左下、从上往下分别能看到的结点个数。注意,此处均把二叉树的每条边都设置为等长,角度为45度,因此结点可能在视觉上重叠。所谓从右往左看是指,对同一层的结点,右边的结点会挡住左边的结点,这样同一层结点就只能看到最右边的那一个;同样的,从右上往左下看是指,右上角的结点会挡住左下角45度的结点;从上往下看是指,对同一竖直位置来说,只能看到最上方的结点。例如对下图来说,从右往左能看到3个结点,从右上往左下能看到3个结点,从上往下能看到5个结点

输入
每个输入文件中一组数据。第一行一个正整数N(1<=N<=30),代表二叉树的结点个数(结点编号为1~N)。接下来两行,每行N个正整数,分别代表二叉树的层序遍历序列和中序遍历序列。数据保证序列中1~N的每个数出现且只出现一次。输出
先输出两行,每行N个正整数,分别代表二叉树的先序遍历序列和后序遍历序列。接下来分三行输出从右往左、从右上往左下、从上往下分别能看到的结点个数。每行末尾均不允许输出多余的空格。样例输入
7
1 2 3 4 5 6 7
4 2 5 1 6 3 7
样例输出
1 2 4 5 3 6 7
4 5 2 6 7 3 1
3
3
5
提示
提交状态

这道题提交了整整9次,最后发现是题目看错,题目要求的是从右上往左下看,而我在求从右下往左上看
首先递归,构建树,这个找找规律就好,之后先序后序输出,直接递归输出即可
最后看到的节点个数
1.从右往做看,这个即求树的层数,只要构建树的时候加个小变量代表当前层数即可
2.从右上往左下看,这个即求往右的最大深度,即只有往右的时候,看到的个数才会+1,同样设置个小变量即可
3.从上往下看,这个可以看成树的宽度,设根节点为位置0,往左就是位置-1,往右就是位置+1,构建一遍树下来可以求出最小位置l和最大位置r

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node {int data;node *l, *r;int tt;node() { l = r = NULL; }
};
vector<int> a, b;int N;
vector<node> all;
int lev = 0, lev2 = 0, lev3 = 0;//依次代表看到的个数
int l = 0, r = 0;//代表最左位置和最右位置
void change(vector<int> a, int b1, int b2, int v, int m, int n)//v代表层数,m代表往右的层数,n代表位置
{//构建树if (m > lev2) lev2 = m;if (n > r) r = n;if (n<l) l = n;if (++v > lev) lev = v;int pos = find(b.begin(), b.end(), a[0]) - b.begin();int k = 1;if (pos > b1){vector<int> temp;all[a[0]].l = &all[a[k++]];vector<bool> visited(N + 1, false);for (int t = b1;t < pos;t++)visited[b[t]] = true;for (auto x : a)if (visited[x]) temp.push_back(x);change(temp, b1, pos - 1, v, m, n - 1);}if (pos < b2){vector<int> temp;all[a[0]].r = &all[a[k]];vector<bool> visited(N + 1, false);for (int t = pos + 1;t <= b2;t++)visited[b[t]] = true;for (auto x : a)if (visited[x]) temp.push_back(x);change(temp, pos + 1, b2, v, m + 1, n + 1);}
}
int cnt;
void PreOrderTraver(node *root)//先序遍历
{if (root == NULL) return;if (cnt++)   cout << " " << root->data;else cout << root->data;PreOrderTraver(root->l);PreOrderTraver(root->r);
}
void PostOrderTraver(node *root)//后序遍历
{if (root == NULL) return;PostOrderTraver(root->l);PostOrderTraver(root->r);if (cnt++)  cout << " " << root->data;else cout << root->data;
}int main()
{cin >> N;a.resize(N);b.resize(N);all.resize(N + 1);for (int t = 1;t <= N;t++)all[t].data = t;for (int t = 0;t < N;t++)cin >>a[t];for (int t = 0;t < N;t++)cin >> b[t];change(a, 0, N - 1, 0, 1, 0);node *root;root = &all[a[0]];cnt = 0;PreOrderTraver(root);cout << endl;cnt = 0;PostOrderTraver(root);cout << endl;lev3 = r - l + 1;cout << lev << endl << lev2 << endl << lev3 << endl;
}

问题 D: 上帝视角相关推荐

  1. 微众银行殷磊:AI+卫星,从上帝视角洞察资产管理|BDTC 2019

    出品 | AI科技大本营(ID:rgznai100) 12月5日-7日,2019中国大数据技术大会(BDTC)于北京隆重举办,大会已成功举办十二届,是大数据领域极具影响力的行业盛会.本届大会汇聚了学术 ...

  2. 上帝视角任意切换:三维重建和图像渲染是怎么结合的?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 导读 本文介绍了3D图像网站Photo Synth及其前身Photo Tourism,并讲解了它们的两 ...

  3. 拥有“上帝视角”是怎样的体验?高分多模卫星首批影像成果发布

    本文转载自"中国的航天",原标题<拥有"上帝视角"是怎样的体验?高分多模卫星首批影像成果发布>,作者 | 杨璐 9月29日,国家航天局发布了高分辨率 ...

  4. 上帝视角:程序员为什么需要理解 CPU?

    来源 | 码农的荒岛求生(ID:escape-it) 可能有的同学会问,程序员写代码就好了,为什么需要去理解CPU啊?不嫌累啊?啊?啊?你倒是说啊. 计算机系统 != 汉堡包 在之前的文章中我把计算机 ...

  5. “白痴“上帝视角调节反序列化链之CC2

    说是白痴上帝视角的原因在于我们拿到了poc,模拟不知道任何细节,去分析这个漏洞的形成原因.也可以说半黑盒状态,主要是锻炼一下分析能力.CC1的分析已经在之前的文章发过了.主要是拿来入门的,现在我们分析 ...

  6. 转载 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛? (手机游戏)...

    程序员上帝视角解读"旅行青蛙",你的呱真的在旅行嘛? 2018-02-05 黄小秋 数据与算法之美 来源:知乎 作者:黄小秋 原文链接:https://www.zhihu.com/ ...

  7. AI数学基础之:概率和上帝视角

    文章目录 简介 蒙题霍尔问题 上帝视角解决概率问题 上帝视角的好处 简介 天要下雨,娘要嫁人.虽然我们不能控制未来的走向,但是可以一定程度上预测为来事情发生的可能性.而这种可能性就叫做概率.什么是概率 ...

  8. 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?

    来源:知乎 作者:黄小秋 原文链接:https://www.zhihu.com/question/68733553/answer/305463907 导语:知乎有位程序员大佬,为了让老母亲老父亲们理解 ...

  9. 优云Monitor:开启数据中心主机运维的上帝视角

    常常有这么一句话在激励每一位运维人员,"不以故障多为耻,而以恢复快为荣."运维人员就是要快速定位问题,分析问题,排除故障,快速恢复来保障生产业务不受中断.然而,现代大型数据中心,运 ...

  10. java上帝模块常见的情况_JVM上帝视角看JVM内存模型,分而治之论各模块详情详解...

    1. 上帝视角 [树看JVM] [图看JVM] 2. 分而治之 2.1 堆区 构成:堆区由新生代和老年代组成,新生代中包含伊甸区(Eden).幸存者区(survivor from .survivor ...

最新文章

  1. turtlebot雷达模块
  2. 合肥云暨移动应用孵化基地全面运营,服务企业转型升级
  3. iOS10 UI教程基改变视图的外观与视图的可见性
  4. JAVA实现可设置背景的MDI窗口
  5. CSS行高——line-height
  6. Microsoft Visual Studio 打开代码出现乱码解决方案
  7. 数据科学 IPython 笔记本 7.15 高性能 Pandas
  8. 做游戏,学编程(C语言) 9 贪吃蛇
  9. 大数据分析应注意哪些问题
  10. (转载) AT指令详解
  11. linux在VM下分辨率的问题
  12. mysql操作 菜鸟,菜鸟通关宝典之mysql基础操作
  13. 大学生安卓期末设计之本地音乐播放器
  14. jsp + servlet 复习(C01)
  15. vs2019使用方法
  16. Android多点触摸的判断
  17. CDD数据库文件制作(三)——DID
  18. VC++利用微软msxml3.dll创建xml文件
  19. Map应用:电话聊天狂人
  20. 我是一个将近30岁的女程序员

热门文章

  1. 屏幕录像专家2014 v0318 免费版
  2. 吉林大学邮箱smtp服务器,吉珠专属EDU邮箱上线,校友也可申请!除了发邮件,这个邮箱还能省钱!...
  3. 史上最简单的图像识别-百度AI开放平台
  4. java opencv 实现换脸
  5. 科研教育「双目视觉技术」首选!维视MV-VS220双目立体视觉系统开发平台
  6. R语言:填色等值线图及其色标(color bar)设置
  7. protues 软件介绍
  8. WoShop跨境电商国际支付Paypal支付商城全开源无加密商城源码
  9. Java base64转化成 inputStream
  10. 论文笔记Understanding and Diagnosing Visual Tracking Systems