HDU 5444 Elven Postman 二叉排序树

HDU 5444

题意:给你一棵树的先序遍历,中序遍历默认是1...n,然后q个查询,问根节点到该点的路径(题意挺难懂,还是我太傻逼)

思路:这他妈又是个大水题,可是我还是太傻逼。1000个点的树,居然用标准二叉树结构来存点,,,卧槽想些什么东西。可以用一维数组,left,right直接指向位置就行了,我这里用的是链表。对于读入的序列,生成一个二叉排序树,同时记录一下路径就可以了,后面居然忘了清空path又wa了一发。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<vector>
 8 #include<set>
 9 #include<string>
10 #define inf 0x3f3f3f3f
11 #define LL long long
12 #define MAXN 2005
13 #define IN freopen("in.txt","r",stdin);
14 using namespace std;
15
16 struct Node{
17     int x;
18     Node *left, *right;
19     Node(int x = 0) :x(x){
20         left = NULL;
21         right = NULL;
22     };
23 };
24
25 vector<char> path[MAXN];
26
27 Node *root;
28 void bst_insert(int x){
29     //Node *t = root;
30     //return;
31     Node *t = root;
32     //Node *s = &Node(x);
33     while (t != NULL){
34         if (x > t->x){
35             path[x].push_back(‘W‘);
36             if (t->right == NULL){
37                 t->right = new Node(x);
38                 break;
39             }
40             else{
41                 t = t->right;
42             }
43         }
44         else{
45             path[x].push_back(‘E‘);
46             if (t->left == NULL){
47                 t->left = new Node(x);
48                 break;
49             }
50             else{
51                 t = t->left;
52             }
53         }
54     }
55 }
56
57 int main(){
58     //IN;
59     //freopen("out.txt", "w", stdout);
60     int t, n;
61     scanf("%d", &t);
62     while (t--){
63         scanf("%d", &n);
64         int x;
65         scanf("%d", &x);
66         root = new Node(x);
67         for (int i = 1; i <= n; i++){
68             path[i].clear();
69         }
70         for (int i = 2; i <= n; i++) {
71             scanf("%d", &x);
72             bst_insert(x);
73         }
74         //    find(1, n, 1);
75         int q;
76         scanf("%d", &q);
77         //bfs();
78         while (q--){
79             scanf("%d", &x);
80             for (int i = 0; i < path[x].size(); i++){
81                 printf("%c", path[x][i]);
82             }
83             printf("\n");
84         }
85     }
86     return 0;
87 }
时间: 2024-12-23 04:24:01

HDU 5444 Elven Postman 二叉排序树的相关文章

hdu 5444 Elven Postman

题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Description Elves are very peculiar creatures. As we all know, they can live for a very long time and their magical prowess are not something to be taken lightly. Also, they live on tr

hdu 5444 Elven Postman(长春网路赛——平衡二叉树遍历)

题目链接:pid=5444http://">http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1206    Accepted Submission(s): 681 Problem Description E

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)Total Submission(s): 591    Accepted Submission(s): 329 Problem Description Elves are very peculiar creatures. As we all know, they can live for a very

Hdu 5444 Elven Postman dfs

Elven Postman Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5444 Description Elves are very peculiar creatures. As we all know, they can live for a very long time and their magical prowess are not something to

HDU 5444 Elven Postman (2015 ACM/ICPC Asia Regional Changchun Online)

[题目链接]:click here~~ [题目大意]: HDU 5444 题意:在最初为空的二叉树中不断的插入n个数.对于每个数,从根节点开始判断,如果当前节点为空,就插入当前节点,如果当前节点不为空,则小于当前节点的值,插入右子树,否则插入左子树. 接着q次询问,每次询问一个值在二叉树中从根节点开始的查找路径. 3 直接用二叉树模拟整个插入和询问的过程 代码: /* * Problem: HDU No.5444 * Running time: 0MS * Complier: G++ * Aut

HDU 5444 Elven Postman(二叉查找树)

Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 558    Accepted Submission(s): 308 Problem Description Elves are very peculiar creatures. As we all know, they can live for a ver

hdu 5444 Elven Postman长春网赛

5444 2333 建二插排序树,dfs一遍,之后o(1)应对查询 #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int maxn=1008; struct fuck{ int left,right; }poi[maxn]; int tol; struct shit{ char s[maxn]; int idx

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." 它告诉我们,东边的点总是比西边的点

HDU 5444 Elven Postman (二叉树,暴力搜索)

题意:给出一颗二叉树的先序遍历,默认的中序遍历是1..2.……n.给出q个询问,询问从根节点出发到某个点的路径. 析:本来以为是要建树的,一想,原来不用,其实它给的数是按顺序给的,只要搜结点就行,从根开始搜,如果要到的结点比根结点大,那么一定是向W走, 然后去第一个结点,然后接着判定,一直走,如果找到结束就好.水题.当时想的有点复杂. 代码如下: #include <cstdio> #include <string> #include <cstdlib> #includ