您的位置:首页 > 其它

【CodeVS4244】平衡树练习

2016-05-07 11:07 281 查看

Description

判断一些数字在一个数列中是否存在。

Input

第一行输入两个正整数m和n。

第二行m个数字表示这个数列。

第三行n个数字表示需要判断的数字。

Output

输出共一行n个0或1,0表示这个数字不存在,1表示存在。

Sample Input

2 2

2 4

2 5

Sample Output

1 0

HINT

输入数字保证不超过MaxInt。

有节操的人不用set

题解

二叉排序树可以A

#include<iostream>
#include<cstdio>
#define N 1000000
using namespace std;
struct tree
{
int lch,rch;
int val;
}t
;
int topt = 0;
void add_tree(int &now,int val)
{
if (!now)
{
now = ++topt;
t[now].val = val;
return ;
}
if (val<t[now].val)
add_tree(t[now].lch,val);
else
add_tree(t[now].rch,val);
}

bool find(int now,int val)
{
if (!now) return false; //先判断这个
if (val == t[now].val) return true;
if (val < t[now].val) return find(t[now].lch,val);
else return find(t[now].rch,val);
}

int main()
{
int n,m,val,root=0;
scanf("%d%d",&m,&n);
printf("\n");
for (int i=1;i<=m;i++)
{
scanf("%d",&val);
add_tree(root,val);
}
for (int i=1;i<=n;i++)
{
scanf("%d",&val);
printf("%d ",find(root,val));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: