二叉排序树
Time Limit: 1000MS Memory limit: 65536K
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
输出
示例输入
2 123456789 987654321 432156789 0
示例输出
NO NO
#include <stdio.h> #include <stdlib.h> #include <string.h> struct node { int val; struct node *l,*r; }; void creat(node *&p,int cd) { if(cd<p->val) { if(p->l) creat(p->l,cd); else { struct node *q; q=(struct node*)malloc(sizeof(struct node)); q->val=cd; q->l=NULL; q->r=NULL; p->l=q; return ; } } else { if(p->r) creat(p->r,cd); else { struct node *q; q=(struct node*)malloc(sizeof(struct node)); q->val=cd; q->l=NULL; q->r=NULL; p->r=q; return ; } } } int s[100],count; void mid(node *&p) { if(p==NULL) return; s[count++]=p->val; mid(p->l); mid(p->r); } int main() { int s1[100]; struct node *head; int ch,n,i,l,l1,j; char sh[100],wh[100]; while(~scanf("%d",&n)&&n) { memset(s,0,sizeof(s)); scanf("%s",sh); l=strlen(sh); count=0; for(i=0; i<l; i++) { ch=sh[i]-'0'; if(i==0) { head=(struct node*)malloc(sizeof(struct node)); head->val=ch; head->l=NULL; head->r=NULL; continue; } creat(head,ch); } mid(head); for(i=0; i<n; i++) { int flag=1; scanf("%s",wh); l1=strlen(wh); for(j=0; j<l1; j++) s1[j]=wh[j]-'0'; for(j=0;j<l1; j++) { if(s[j]!=s1[j]) { flag=0; break; } } if(flag) printf("YES\n"); else printf("NO\n"); }
} return 0; }