hdu 5444 Elven Postman(长春网路赛——平衡二叉树遍历)
题目链接: pid=5444http://">http://acm.hdu.edu.cn/showproblem.php?pid=5444
Elven Postman
Although delivering stuffs through magical teleportation is extremely convenient (much like emails). They still sometimes prefer other more “traditional” methods.
So, as a elven postman, it is crucial to understand how to deliver the mail to the correct room of the tree. The elven tree always branches into no more than two paths upon intersection, either in the east direction or the west. It coincidentally looks awfully
like a binary tree we human computer scientist know. Not only that, when numbering the rooms, they always number the room number from the east-most position to the west. For rooms in the east are usually more preferable and more expensive due to they having
the privilege to see the sunrise, which matters a lot in elven culture.
Anyways, the elves usually wrote down all the rooms in a sequence at the root of the tree so that the postman may know how to deliver the mail. The sequence is written as follows, it will go straight to visit the east-most room and write down every room it
encountered along the way. After the first room is reached, it will then go to the next unvisited east-most room, writing down every unvisited room on the way as well until all rooms are visited.
Your task is to determine how to reach a certain room given the sequence written on the root.
For instance, the sequence 2, 1, 4, 3 would be written on the root of the following tree.
T(T≤10)
indicating the number of test cases.
For each test case, there is a number n(n≤1000)
on a line representing the number of rooms in this tree.
n
integers representing the sequence written at the root follow, respectively
a
where a
On the next line, there is a number q
representing the number of mails to be sent. After that, there will be
q
integers x
indicating the destination room number of each mail.
or W
the postman needs to make to deliver the mail. For that
E
means that the postman should move up the eastern branch and
W
the western one. If the destination is on the root, just output a blank line would suffice.
Note that for simplicity, we assume the postman always starts from the root regardless of the room he had just visited.
2
4
2 1 4 3
3
1 2 3
6
6 5 4 3 2 1
1
1
E WE
EEEEE
pid=5664" target="_blank">5664
pid=5663" target="_blank">5663
pid=5662" target="_blank">5662
5661 5660题目大意:给n个结点,第一个输入的为给一个根节点,接下的一些结点比根节点小就挂在左边,比根节点大就挂在根节点的右边。以此类推。
。。。
给出q个询问。询问每一个从根节点出发到某个点的路径。
解题思路:一个点一个点的加进去就好了。和根节点进行比較,最后遍历二叉树查找就可以。
详见代码。
#include <iostream>
#include <cstdio> using namespace std; struct node
{
int data;
node *leftchild,*rightchild;
node (int st)
{
data=st;
leftchild=rightchild=NULL;
}
}; void creat(node *root,int num)
{
if (root->data>num)
{
if (root->leftchild==NULL)
{
node *n=new node(num);
root->leftchild=n;
}
else
{
creat(root->leftchild,num);
}
}
else
{
if (root->rightchild==NULL)
{
node *n=new node(num);
root->rightchild=n;
}
else
{
creat(root->rightchild,num);
}
}
} void get_path(node *root,int x)
{
if (root->data==x)
{
puts("");
return ;
}
else if (root->data>x)
{
putchar('E');
get_path(root->leftchild,x);
}
else
{
putchar('W');
get_path(root->rightchild,x);
}
} int main()
{
int t;
int a;
scanf("%d",&t);
while (t--)
{
int n;
scanf("%d",&n);
int st;
scanf("%d",&st);
node *root=new node(st); for (int i=1;i<n;i++)
{
scanf("%d",&a);
creat(root,a);
}
int q,qq;
scanf("%d",&q);
for (int i=0;i<q;i++)
{
scanf("%d",&qq);
get_path(root,qq);
}
}
return 0;
}
hdu 5444 Elven Postman(长春网路赛——平衡二叉树遍历)的更多相关文章
- hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online
很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死…… 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了……没了! 反复读题,终于在偶然间 ...
- hdu 5444 Elven Postman
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Description Elves are very peculia ...
- Hdu 5444 Elven Postman dfs
Elven Postman Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- 2015 ACM/ICPC Asia Regional Changchun Online HDU 5444 Elven Postman【二叉排序树的建树和遍历查找】
Elven Postman Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- hdu 5444 Elven Postman 二叉树
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem Descrip ...
- hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online
Problem Description Elves are very peculiar creatures. As we all know, they can live for a very long ...
- HDU 5444 Elven Postman (2015 ACM/ICPC Asia Regional Changchun Online)
Elven Postman Elves are very peculiar creatures. As we all know, they can live for a very long time ...
- HDU 5444 Elven Postman 二叉排序树
HDU 5444 题意:给你一棵树的先序遍历,中序遍历默认是1...n,然后q个查询,问根节点到该点的路径(题意挺难懂,还是我太傻逼) 思路:这他妈又是个大水题,可是我还是太傻逼.1000个点的树,居 ...
- HDU 5444 Elven Postman (二叉树,暴力搜索)
题意:给出一颗二叉树的先序遍历,默认的中序遍历是1..2.……n.给出q个询问,询问从根节点出发到某个点的路径. 析:本来以为是要建树的,一想,原来不用,其实它给的数是按顺序给的,只要搜结点就行,从根 ...
随机推荐
- 【转】UGUI EventSystem
EventSystem The EventSystem is a way of sending events to objects in the application based on inpu ...
- JAVA与VB通过SOCKET通讯
JAVA与VB通过SOCKET通讯 在做项目的过程中,本来是想使用JAVA的comm.jar工具实现串口通讯,不知道怎么回事,总是取不到电脑的串口.所以,改为现在的这种模式:java通过socket给 ...
- HDU 1824 Let's go home(2-SAT+Tarjan)
Let's go home Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Codeforces Round #361 (Div. 2) B bfs处理
B. Mike and Shortcuts time limit per test 3 seconds memory limit per test 256 megabytes input standa ...
- Java 学习(1): windows java 运行& 环境配置
Java 文件的运行 如下,创建了一个 名为"HelloWorld.java" 的 Java 文件: public class HelloWorld { public static ...
- 数学作业(codevs 2314)
题目描述 Description 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算 Concatenate (1 .. N ) Mod M 的值 ...
- ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: YES)
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ERROR 1045 (28000 ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---1
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...
- VIM使用技巧2
假如有以下程序片段: var foo = 1 var bar = 'a' var foobar = foo + bar 如果我们想在每行行尾加上分号, (1)使用$移动光标到行尾, (2)执行a;&l ...
- 《30天学习30种新技术》-Day 15:Meteor —— 从零开始创建一个 Web 应用
目录:https://segmentfault.com/a/1190000000349384 原文: https://segmentfault.com/a/1190000000361440 到目前为止 ...