[求助]关于确定唯一二叉树,代码检不出错误
#include <stdio.h>#include <Stdlib.h>
#include <string.h>
typedef struct Node
{
char data;
struct Node *LeftChild;
struct Node *RightChild;
}BiTNode;
void Initiate(BiTNode **root)
{
*root=(BiTNode *)malloc(sizeof(BiTNode));
(*root)->LeftChild=NULL;
(*root)->RightChild=NULL;
}
void Visit(char item)
{
printf("%c",item);
}
void PreOrder(BiTNode *T,void Visit(char item))
{
if(T!=NULL)
{
Visit(T->data);
PreOrder(T->LeftChild,Visit);
PreOrder(T->RightChild,Visit);
}
}
void InOrder(BiTNode *T,void Visit(char item))
{
if(T!=NULL)
{
InOrder(T->LeftChild,Visit);
Visit(T->data);
InOrder(T->RightChild,Visit);
}
}
void PostOrder(BiTNode *T,void Visit(char item))
{
if(T!=NULL)
{
PostOrder(T->LeftChild,Visit);
PostOrder(T->RightChild,Visit);
Visit(T->data);
}
}
void PrintBiTree(BiTNode *T,int n)
{
int i;
if(T==NULL) return;
PrintBiTree(T->RightChild,n+1);
for(i=0;i<n;i++) printf(" ");
if(n>=0)
{
printf("--------");
printf("%c\n",T->data);
}
PrintBiTree(T->LeftChild,n+1);
}
BiTNode* CreatTree(char *pre,char *in,int len)
{
char *p,*i;
int j=0; //j表示根节点在中序中的位置
BiTNode *T;
Initiate(&T);
T->data=pre[0];
if(len==0)return NULL;
while(j<len)
{
if(in[j]==pre[0])break;
j++;
}
p = pre+1; //确定左子树的先序序列指针
i= in; //确定左子树的中序序列指针
T->LeftChild=CreatTree(p,i,j); //递归生成左子树
p = pre+j+1; //确定右子树的先序序列指针
i = in+j+1; //确定右子树的中序序列指针
T->RightChild=CreatTree (p,i,len-j-1);//递归生成右子树
return T;
}
void main()
{
BiTNode *T;
int len;
char *Pre;//前序序列
char *In;//中序序列
printf("请输入前序序列:");
scanf("%s",&Pre);
printf("请输入中序序列:");
scanf("%s",&In);
len=strlen(In);
Initiate(&T);
T=CreatTree(Pre,In,len);
printf("二叉树构造成功!\n");
printf("逆时针旋转90度的二叉树如下所示:\n");
PrintBiTree(T,0);
printf("前序序列:");
PreOrder(T,Visit);
printf("\n中序序列:");
InOrder(T,Visit);
printf("\n后序序列:");
PostOrder(T,Visit);
printf("\n");
}
我想问题出现在后两个函数,可以编译出来,但是输入之后无法运行。