hdu5444 Elven Postman
标签:二叉树
/*
题意:打印二叉树根节点到某一结点的路径。
建树,题目会给一串数字,以第一个数字为根节点。余下的值若比父节点大,值在父节点的W;反之,则在E。
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
vector <char> ans;
struct Node{ //建立结点,用结构体加指针,v表示结点的值
int v;
Node *left, *right; //左右子树
Node(): left(NULL), right(NULL) {} //创建新结点
} tree;
Node* root;
Node *newnode(){
return new Node(); //申请新结点
}
Node* Create(Node *rt, int v){ //建树,传入根结点和需要建立的值
if(rt == NULL){ //根结点为空,将值赋给根结点
rt = newnode();
rt->v = v;
rt->left = rt->right = NULL;
return rt;
}
if(rt->v > v) rt->right = Create(rt->right, v); //输入值<父节点,递归建立右子树
else rt->left = Create(rt->left,v); //输入值>父节点,递归建立左子树
return rt;
}
void get_path(Node *root, int x){
if(root->v == x){
puts("");
return ;
}
else if(root->v > x){
putchar('E');
get_path(root->right, x);
}
else{
putchar('W');
get_path(root->left, x);
}
}
int main(){
int T, n, q;
scanf("%d", &T);
while(T--){
scanf("%d", &n);
root = NULL;
int v;
for(int i = 0; i < n; i++){
scanf("%d", &v);
root = Create(root, v); //边输入边建树
}
scanf("%d", &q);
for(int i = 0; i < q; i++){
int d;
scanf("%d", &d);
get_path(root, d);
}
}
return 0;
}