【CodeVS4244】平衡树练习

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[N];
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));
    }
}

 

posted @ 2016-05-07 11:07  mengyue  阅读(181)  评论(0编辑  收藏  举报