杭电3791-二叉搜索树
2016-05-17 21:52
337 查看
不知道怎么回事,递归过不了,数组模拟却可以,注释部分为递归代码,为注释部分为数组模拟代码(可以AC),求大神指教。
/*#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct k { char data; k *lchild,*rchild; }node; void Build(node *&h,char ch) { if(h==NULL) { h=(node *)malloc(sizeof(node)); h->data=ch; h->lchild=h->rchild=NULL; return ; } if(h->data<ch) Build(h->lchild,ch); else Build(h->rchild,ch); } bool Judge(node *h1,node *h2) { if(h1->data!=h2->data) { return false; } if(h1->lchild!=NULL&&h2->lchild==NULL||h1->rchild==NULL&&h2->rchild!=NULL) return false; if(h1->lchild==NULL&&h2->lchild==NULL&&h1->rchild==NULL&&h2->rchild==NULL) return true; int flag1=true,flag2=true; if(h1->lchild!=NULL&&h2->lchild!=NULL) { flag1=Judge(h1->lchild,h2->lchild); } if(h1->rchild!=NULL&&h2->rchild!=NULL) { flag2=Judge(h1->rchild,h2->rchild); } if(flag1&&flag2)return true; } int main() { int n,len,i,j,len1; node *head,*head1; char s[30],s1[30]; scanf("%d",&n); scanf("%s",s); len=strlen(s); head=(node *)malloc(sizeof(node)); head->lchild=head->rchild; head->data=s[0]; for(i=1;i<len;i++) { Build(head,s[i]); } for(i=1;i<=n;i++) { scanf("%s",s1); head1=(node *)malloc(sizeof(node)); head1->lchild=head1->rchild=NULL; head1->data=s1[0]; len1=strlen(s1); for(j=1;j<len1;j++) { Build(head1,s1[j]); } int flag=Judge(head,head1); if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }*/ #include <iostream> #include <cstring> #include <cstdio> using namespace std; int flag1[1100],flag2[1100]; char s1[15],s2[15]; int main() { int n,i,len,j; int pos; while(~scanf("%d",&n)&&n) { scanf("%s",s1); len=strlen(s1); for(i=0;i<1050;i++) flag1[i]=-1; for(i=0,pos=1;i<len;i++) { while(flag1[pos]!=-1) { if(flag1[pos]<s1[i]) { pos=pos*2+1; } else pos*=2; } flag1[pos]=s1[i]; pos=1; } for(j=1;j<=n;j++) { for(i=0;i<1050;i++) flag2[i]=-1; scanf("%s",s2); len=strlen(s2); for(i=0,pos=1;i<len;i++) { while(flag2[pos]!=-1) { if(flag2[pos]<s2[i]) { pos=pos*2+1; } else pos*=2; } flag2[pos]=s2[i]; pos=1; } int flag=1; for(i=1;i<1050;i++) { if(flag1[i]!=flag2[i]) { flag=0; break; } } if(flag) printf("YES\n"); else printf("NO\n"); } } return 0; }
相关文章推荐
- Genymotion,高性能的 Android 模拟器
- eclipse build path功能总 结
- 创建本地RPM源之更新系统旧版软件mysql
- oracle11g 开启归档模式。
- config libigl in qt through cmake under ubuntu
- hiho1148 编程之美
- PayPal 开发详解(五):创建第一个应用,获取clientId和clientSecret
- Java中只有值传递,没有引用传递
- Python scrapy 实现网页爬虫
- leetcode笔记—Substring with Concatenation of All Words加最小的窗户子串
- linux内核mmc读写分析
- git reset 与 git revert
- hihoCoder #1038 : 01背包
- git操作
- apache开启虚拟主机localhost无法访问
- ViewPager-Shape
- faster rcnn修改demo.py保存网络中间结果
- Quartz.NET c# 教程 - 课程三:Jobs 和 JobDetails
- 那些被漏掉的JQuery总结(二)——如何给下拉框取值赋值?
- 项目30- 点-圆-圆柱类族的设计