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

来源:互联网 发布:联通网络电视怎么样 编辑:程序博客网 时间:2024/05/12 17:24
#include <stdio.h>#include <stdlib.h>#define ElementType inttypedef 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);}

真是头大 求网上大神指出一下 不知道在哪里有问题了
0 0
原创粉丝点击