hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online...
很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死……
题意:
题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了……没了!
反复读题,终于在偶然间注意到了这一句——"Not only that, when numbering the rooms, they always number the room number from the east-most position to the west."
它告诉我们,东边的点总是比西边的点小——也就是说,这个树的中序遍历是从1到n的一个等差数列……
输入:
首行输入一个整数t,表示有t组数据;
接下来每组数据首行一个整数n,表示有这棵树有n个节点。
接下来一行有n个整数,表示这棵树的先序遍历。
接下来一行一个整数m,表示m次查询。
接下来一行有m个整数,表示每次查询的点。
输出:
每次查询输出从根节点到查询节点的路径,路径中,每次向左输出'E',每次向右输出'W'。
解题思路:
套上模板,建立起这棵树,同时用一个fm[]数组讲每个节点的父节点记录下来。然后查询的时候使用就行了。
但是有两点需要注意:
1. 由于我是使用指针建立的树,所以每用完一组数据都要记得释放内存!
2. 每次第二组数据的根节点也许在第一组数据中不是根节点,所以要记得将根节点的父节点fm[root]置为0。我的现场赛名额啊……因此离我而去T_T,555555……
不说了,说多了都是泪。。。。。
上代码——
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include <cmath> 5 #include <algorithm> 6 using namespace std; 7 8 struct Node 9 { 10 int c; 11 Node *left; 12 Node *right; 13 }; 14 15 int fm[1010]; 16 int t, n, m; 17 char dis[1010]; 18 int pree[1010],ine[1010]; 19 20 Node* BuildTree(int *pre, int *in, int length) //建树 21 { 22 if(length == 0) return NULL; 23 Node* node = (Node*) malloc(sizeof(Node)); 24 node->c = pre[0]; 25 int rootindex = -1; 26 for(int i = 0;i < length;i++) 27 { 28 if(in[i] == pre[0]) 29 { 30 rootindex = i; 31 break; 32 } 33 } 34 node->left = BuildTree(pre+1,in,rootindex);//left 35 node->right = BuildTree(pre+1+rootindex,in+rootindex+1,length-rootindex-1);//right 36 return node; 37 } 38 39 void print(Node *root) //记录父节点 40 { 41 if(root != NULL) 42 { 43 if(root->left != NULL) fm[root->left->c] = (root->c)*10; 44 print(root->left); 45 if(root->right != NULL) fm[root->right->c] = (root->c)*10+1; 46 print(root->right); 47 } 48 } 49 50 void dfs(Node* root) //释放内存 51 { 52 if(root != NULL) 53 { 54 if(root->left != NULL) dfs(root->left); 55 if(root->right != NULL) dfs(root->right); 56 free(root); 57 } 58 } 59 60 int main() 61 { 62 //freopen("test.in", "r", stdin); 63 scanf("%d", &t); 64 while(t--) 65 { 66 scanf("%d", &n); 67 for(int i = 0; i < n; i++) 68 { 69 scanf("%d", &pree[i]); 70 ine[i] = i+1; 71 } 72 Node *root = BuildTree(pree, ine, n) ; 73 fm[root->c] = 0; //就是这里,坑死我了……我@#¥%^&*! 74 print(root); 75 scanf("%d",&m); 76 for(int i = 0; i < m; i++) 77 { 78 int mid; 79 scanf("%d", &mid); 80 int k = 0; 81 while(fm[mid] != 0) 82 { 83 if(fm[mid]%10 == 1) dis[k] = 'W'; 84 else dis[k] = 'E'; 85 mid = fm[mid]/10; 86 k++; 87 } 88 for(int j = k-1; j >=0; j--) printf("%c", dis[j]); //输出路径 89 printf("\n"); 90 } 91 dfs(root); 92 } 93 return 0; 94 }
View Code
转载于:https://www.cnblogs.com/mypride/p/4814787.html
hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online...相关推荐
- HDU 5476 Explore Track of Point 几何题 —— 2015 ACM/ICPC Asia Regional Shanghai Online
题目见HDU 5476 给出等腰三角形ABC,AB=AC,M为BC中点.P点为三角形内使min{∠MPB+∠APC,∠MPC+∠APB} 最大的点.求P点轨迹. 则容易找到中线AM上的P点都满足使得∠ ...
- HDU 5468 Puzzled Elena(2015 ACM/ICPC Asia Regional Shanghai Online)
题目大意 这道题要求出每个节点与其子树节点中有多少个节点互质,题目是这样,但是如果你认为真的是这样那就错了,因为有可能根节点是1,那么1与本身也是互质的!!其实我真的搞不懂,说好了与子树互质为什么就把 ...
- HDU - 5493 Queue 2015 ACM/ICPC Asia Regional Hefei Online(线段树)
按身高排序,每个人前面最高的人数有上限,如果超出上限说明impossible, 每次考虑最小的人,把他放在在当前的从左往右第k+1个空位 因为要求字典序最小,所以每次k和(上限-k)取min值. 没有 ...
- [HDU] 5444.Elven Postman (堆)
题意:对于一个堆,找出从根节点出发到某一个点的行走的路径 输入:第一行数据组数T,每一组第1行元素个数n,第2行各个元素,第3行询问个数,第4行询问元素. 输出:每一询问元素打印出由"E&q ...
- hdu 5023 poj 2777(线段染色)2014 ACM/ICPC Asia Regional 广州 Online
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5023 http://poj.org/problem?id=2777 题意:给出一个长度为N的线段,分 ...
- hdu 4283 You Are the One ( dp 2012 ACM/ICPC Asia Regional Tianjin Online )
http://acm.hdu.edu.cn/showproblem.php?pid=4283 题意: The TV shows such as You Are the One has been ver ...
- HDU 4069 Squiggly Sudoku(DLX)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)...
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4069 Problem Description Today we play a squiggly sud ...
- Hdu 5873 2016 ACM/ICPC Asia Regional Dalian Online 1006(兰道定理)
题解: 如果没有平手选项, 赢得加一分的话, 可以用Landau's Theorem(兰道定理)判定. 稍微修改一下这个定理就能做了. 假设S1,S2--,Sn是他们的得分序列,从小到大排个序.那么这 ...
- HDU 6194 String String String (后缀数组+线段树, 2017 ACM/ICPC Asia Regional Shenyang Online)
Problem 求字符串 S 中严格出现 k 次的子串个数 k≥1k\ge 1 |S|≤105|S|\le 10^5 ∑|S|≤2×106\sum |S| \le 2\times 10^6 Idea ...
最新文章
- 服务器支持热部署吗,热部署
- 计算机里的游戏可以找回吗,找回电脑游戏作文
- C#变量命名的几种方式—C#基础回顾
- 悼念传奇,约翰询问#183;纳什和他的妻子艾丽西亚致敬,创建一个传奇,爱数学...
- PowerDesigner中的对象与关系映射建模
- Oracle11g创建表空间语句
- [PLSQL] 游标学习
- [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)
- matlab freqs函数用法,Matlab freqs 函数
- RSA 2019|远禾科技携YScanner荣获国际权威杂志认可
- [转帖]linux /proc目录下的文件为何无法用vi编辑保存
- 浅谈Cache Memory
- 2019年世界500强完整榜单,出炉!
- Gitee+PicGo+Typora图床搭建丨出现 Error: You must be logged in to use 的解决方法
- sed -n使用变量
- 【转载】如何打领带-普瑞特结
- (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究(RTC-DS1302时钟)
- rtsp 华为_【V哥漫画安防】华为摄像机RTSP流常见问题解答
- 梦幻西游只知道服务器怎么找回,买回八年前的梦幻号,只为找回当年的美好
- Java 基础学习之类集框架 十 (SortedMap 接口)
热门文章
- ajax请求是宏任务还是微任务_微服务-如何解决链路追踪问题
- github服务器停止响应,如何解决“git pull,致命:无法访问'https://github.com ... \':服务器空回复”...
- python编写脚本方法_python 定时器,实现每天凌晨3点执行的方法
- java面向对象各章节教程_第二部分java面向对象编程第08章集合框架List1章节.ppt...
- wordpress linux位置,Linux 下搭建 WordPress 个人站点
- webpack 合并压缩_webpack的运用
- matlab 置顶曲线,matlab figure 最大,最小,置顶
- linux非守护线程一直不释放,Linux pthread 和 java thread 的是 / 非守护线程的行为
- 英特尔核显自定义分辨率_华为推出两款MateBook D系列笔记本:搭载英特尔11代酷睿...
- sqlserver查询当月的每一天_SQL生成一年每一天的时间列表的几种方法