题目: 牛客网链接
概述: 给定两个序列,比较形成的二叉搜索树是否长得一样
思路: 只要给出的数一样,他们的中序遍历肯定是一样的。那么我们可以用前序遍历判断。而且前序(已确定)+ 中序就可以确定一个二叉树。
另外,要关注一下里面getchar的用法:在输入完整数后,会形成一个回车,在输入字符串的前面要用getchar()接住。
gets()可用来输入数组。
尽管给出的是整数,但是用char类型保存,为的是使用strcmp()函数。
#include <iostream>
#include<string.h>
using namespace std;
typedef struct TNode{
char data;
struct TNode *left,*right;
}*BiTree,TNode;
int size;
BiTree creat(){
BiTree T = new TNode();
T -> left = T -> right = NULL;
return T;
}
BiTree Insert(BiTree T,char x){
if(!T){
T=creat();
T->data=x;
return T;
}
if(x<T->data)
T->left=Insert(T->left,x);
else if(x>T->data)
T->right=Insert(T->right,x);
return T;
}
void PreOrder(BiTree T,char pre[]){
if(!T) return;
pre[size++]=T->data;
pre[size]=0;
PreOrder(T->left,pre);
PreOrder(T->right,pre);
return;
}
int main(){
BiTree T1,T2;
int n;
while(scanf("%d",&n)!=EOF&&n!=0){
getchar();
T1=NULL;
char str1[12],str2[12];
gets(str1);
for(int i=0;str1[i]!=0;i++)
T1=Insert(T1,str1[i]);
for(int i=0;i<n;i++){
T2=NULL;
gets(str2);
for(int i=0;str2[i]!=0;i++)
T2=Insert(T2,str2[i]);
char a[24],b[24];
PreOrder(T1,a);
size=0;
PreOrder(T2,b);
size=0;
puts(strcmp(a,b)==0?"YES":"NO");
}
}
return 0;
}