题目链接:https://pintia.cn/problem-sets/1211841066264109056/problems/1236509430527590400
判断是不是同一棵二叉搜索树
写的代码如下:(在自己编译器上可以通过,但是在OJ上显示段错误,希望大佬指点一下)
#include<stdio.h>
#include<malloc.h>
typedef struct BINODE{
int value;
struct BINODE *lchild,*rchild;
}BiTNode,*BiTree;
int flag=1;
//建立二叉搜索树
BiTNode *BuildBiTree(BiTree &T,int n,int a[]){
int i,j;
T=(BiTNode *)malloc(sizeof(BiTNode));
T->value=a[0];
BiTree p=T,q,pre;
p->lchild=NULL;
p->rchild=NULL;
for(i=1,j=1;j<n;i++){
q=(BiTNode *)malloc(sizeof(BiTNode));
q->value=a[j];
pre=p;
if(a[j]<=p->value){
p=p->lchild;
if(p==NULL){
pre->lchild=q;
j++;
q->lchild=NULL;
q->rchild=NULL;
p=T;
}
}
else{
p=p->rchild;
if(p==NULL){
pre->rchild=q;
j++;
q->lchild=NULL;
q->rchild=NULL;
p=T;
}
}
}
}
//两棵树同时遍历进行判断
void InOrder(BiTree T,BiTree TT){
if(T && TT){
InOrder(T->lchild,TT->lchild);
if(T->value!=TT->value) flag=0;
InOrder(T->rchild,TT->rchild);
}
}
int main(){
int n=-1,k,i;
int a[15];
int b[15];
while(n!=0){
BiTree T=NULL,TT=NULL;
scanf("%d",&n);
if(n!=0){
scanf("%d",&k);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
BuildBiTree(T,n,a);
while(k--){
flag=1;
for(i=0;i<n;i++){
scanf("%d",&b[i]);
}
BuildBiTree(TT,n,b);
InOrder(T,TT);
if(flag==1) printf("Yes\n");
else printf("No\n");
}
}
}
return 0;
}
自己摸索很久了,发现不了问题,如果能解决,感激不尽!!