您的位置:首页 > 其它

hdu 5444 Elven Postman(搜索二叉树)

2015-09-14 22:20 330 查看
原题链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5444
题目大意:

测试数据T个。

n个结点。

第一个数为根结点(左边>右边)。

q个询问。

找到对应数值的位置。

左移输出‘W’,右移输出‘E’,为根结点则只输出换行。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1000+10;
int L
,R
;
int pre,root;
void find_pos(int x)
{
if(x>pre)
{
if(L[pre]==0)
{
L[pre]=x;
return;
}
pre=L[pre];
find_pos(x);
}else{
if(R[pre]==0)
{
R[pre]=x;
return;
}
pre=R[pre];
find_pos(x);
}

}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(L,0,sizeof(L));
memset(R,0,sizeof(R));
int n;
scanf("%d",&n);
int x;
scanf("%d",&root);
for(int i=1;i<n;i++)
{
pre=root;
scanf("%d",&x);
find_pos(x);
}
int q,ask;
scanf("%d",&q);

for(int i=0;i<q;i++)
{
pre=root;
scanf("%d",&ask);
while(ask!=pre)
{
if(ask>pre)
{
pre=L[pre];
printf("%c",'W');
}
else{
pre=R[pre];
printf("%c",'E');
}
}
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: