hdu3791(二叉搜索树构造)

来源:互联网 发布:阿里云备案服务号申请 编辑:程序博客网 时间:2024/05/10 10:53

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3791

题目大意:给出若干行数列,其中第一行的数列为基本二叉搜索树的模式,剩下的数列都为需要比较的数列,若构造出的二叉搜索树与基本数列相同,则输出“YES”,否则输出“NO”;

解题思路:根据题目给出的数列构造二叉搜索树,然后循环遍历树,判断是否相等。因为题目较简单,实用数组进行简单的模拟,根据左子节点是根节点下标的2倍,而右子节点是根节点下标的2倍加1.

AC代码:

#include <iostream>#include <cstring>using namespace std;void inserttree(int *tr,int value){    int index=1;    while(tr[index]!=-1)    {        if(tr[index]<value)            index = index*2+1;        else index = index*2;    }    tr[index] = value;}void buildtree(int *tree,char *in,int len){    for(int i=0;i<len;i++)    {        inserttree(tree,in[i]-'0');    }}bool compare(int *a,int *b,int len){    bool f = true;    for(int i=0;i<len;i++)    {        if(a[i]!=b[i])f = false;    }    return f;}int main(){    int source[1000];    int pattern[1000];    int n;    while(cin>>n)    {        memset(source,-1,sizeof(source));        if(n==0)break;        for(int i=0;i<=n;i++)        {            char putin[1000];            cin>>putin;            int len = strlen(putin);            if(i==0)buildtree(source,putin,len);            else            {                memset(pattern,-1,sizeof(pattern));                buildtree(pattern,putin,len);                bool flag = compare(source,pattern,512);                if(flag)cout<<"YES"<<endl;                else cout<<"NO"<<endl;            }        }    }    return 0;}


0 0
原创粉丝点击