题意
给你一个序列构造一个二叉搜索树,然后再给你L个序列,对每个序列构造二叉搜索树,问这棵二叉搜索树跟最开始的二叉搜索树是否一样?
解题思路
分别构造二叉搜索树,然后同时对两棵二叉搜索树进行遍历,看是否一样。
参考代码
#include <iostream>
using namespace std;
typedef struct Node{
int v;
struct Node *l,*r;
}*tree;
int a[15],b[15];
void Insert(tree &t,int x){
if (t==NULL){
t=new Node;
t->v=x;
t->l=t->r=NULL;
return;
}
if (x>t->v)
Insert(t->r,x);
else
Insert(t->l,x);
}
bool query(tree t1,tree t2){
if (t1==NULL && t2==NULL){
return true;
}
else if (t1!=NULL && t2!=NULL){
if (t1->v!=t2->v) return false;
else{
if (query(t1->l,t2->l)==true && query(t1->r,t2->r)==true)
return true;
return false;
}
}
return false;
}
int main(){
int n,l,x;
while (cin>>n){
if (n==0) break;
cin>>l;
tree t1=NULL,t2=NULL;
for (int i=0;i<n;i++){
cin>>x;
Insert(t1,x);
}
for (int i=0;i<l;i++){
t2=NULL;
for (int j=0;j<n;j++){
cin>>x;
Insert(t2,x);
}
if (query(t1,t2)==true) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}