您的位置:首页 > 其它

04-树4 是否同一棵二叉搜索树

2017-03-24 19:32 453 查看
#include <stdio.h>
#include <stdlib.h>
#define ElementType int
typedef struct TNode *Position;
typedef Position Tree;
struct TNode
{
ElementType Data;
Tree Left;
Tree Right;
int flag;
};
Tree makeTree(int N);
Tree InsertTree(Tree T,int V);
int JudgeSame(Tree T,int tmp);
int check(Tree T,int tmp);
void reSet(Tree T);
void FreeTree(Tree T);
void printfTree(Tree T)
{
if(T->Left) printfTree(T->Left);
if(T->Right) printfTree(T->Right);
printf("%d",T->Data);
}
int main()
{
int N,L,i;
Tree T;
//freopen("in.txt", "r", stdin);
scanf("%d",&N);

while(N)
{
scanf("%d",&L);
T=makeTree(N);
printfTree(T);
for(i=0;i<L;i++)
{
if(JudgeSame(T,N))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
reSet(T);
}
FreeTree(T);
scanf("%d",&N);
}
return 0;
}
Tree makeTree(int N)
{
int i=0,tmp;
Tree T;
for(i=0;i<N;i++)
{
scanf("%d",&tmp);
printf("will be inserted nood %d",tmp);
if(!T)
{
printf("init root %d\n",tmp);
T=(Position)malloc(sizeof(struct TNode));
T->Data=tmp;
T->Left=NULL;
T->Right=NULL;
}
else
{
T=InsertTree(T,tmp);
}
}
}
Tree InsertTree(Tree T,int V)
{
if(!T)
{
printf("init chlid Tree %d",V);
T=(Position)malloc(sizeof(struct TNode));
T->Data=V;
T->Left=NULL;
T->Right=NULL;
}
else
{
if(V>T->Data)
{
T->Right=InsertTree(T->Right,V);
}
else
{
T->Left=InsertTree(T->Left,V);
}
}
return T;
}
int JudgeSame(Tree T,int N)
{
int i,V;
scanf("%d",&V);
if(V!=T->Data)
{
return 0;
}
else
{
T->flag=1;
}
for(i=1;i<N;i++)
{
scanf("%d",&V);
if(!check(T,V))
return 0;
}
return 1;
}
int check(Tree T,int tmp)
{
if(T->flag)
{
if(tmp<T->Data)
return JudgeSame(T->Left,tmp);
else if(tmp>T->Data)
return JudgeSame(T->Right,tmp);
else return 0;
}
else
{
if(tmp==T->Data)
{
T->flag=1;
return 1;
}
else
return 0;
}
}
void reSet(Tree T)
{
if(T->Left)
{
reSet(T->Left);
}
if(T->Right)
{
reSet(T->Right);
}
T->flag=0;
}
void FreeTree(Tree T)
{
if(T->Left) FreeTree(T->Left);
if(T->Right) FreeTree(T->Right);
free(T);
}


真是头大 求网上大神指出一下 不知道在哪里有问题了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT mooc 二叉树 struct