线索二叉树 运行时程序错误求助各位大神
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef enum{Link,Thread} PointerTag;
struct BiThrNode
{
char data;
struct BiThrNode *lchild;
struct BiThrNode *rchild;
PointerTag LTag;
PointerTag RTag;
};
void CreateBiThrNode(struct BiThrNode * T)
{
T=(struct BiThrNode *)malloc(sizeof(struct BiThrNode));
char ch;
scanf("%c",&ch);
if(ch == '#')
T = NULL;
else
{
if(T)
T->data = ch;
CreateBiThrNode(T->lchild);
if(T->lchild)
T->LTag = Link;
CreateBiThrNode(T->rchild);
if(T->rchild)
T->RTag = Link;
}
}
struct BiThrNode *pre;
void InThreading(struct BiThrNode *T)
{
if(T)
{
InThreading(T->lchild);
if(!T->lchild)
{
T->LTag = Thread;
T->lchild = pre;
}
if(!T->rchild)
{
T->LTag = Thread;
pre->rchild = T;
}
pre = T;
InThreading(T->rchild);
}
}
void InOrderThreading(struct BiThrNode * Thrt,struct BiThrNode * T)
{
if(!(Thrt=(struct BiThrNode *)malloc(sizeof(struct BiThrNode))))
exit(-1);
Thrt->LTag = Link;
Thrt->LTag = Thread;
Thrt->rchild = Thrt;
if(!T)
Thrt->lchild = Thrt;
else
{
Thrt->lchild = T;
pre = Thrt;
InThreading(T);
pre->rchild = Thrt;
pre->RTag = Thread;
Thrt->rchild = pre;
}
}
void InOrderTraverse_Thr(struct BiThrNode *T)
{
struct BiThrNode *p;
p = T->lchild;
while(p != T)
{
while(p->LTag == Link)
p = p->lchild;
printf("%c",p->data);
while(p->RTag==Thread && p->rchild!=T)
{
p->rchild;
printf("%c",p->data);
}
p = p->rchild;
}
}
int main(void)
{
struct BiThrNode * T=NULL,*Thrt=NULL;
CreateBiThrNode(T);
InOrderThreading(Thrt,T);
InOrderTraverse_Thr(T);
return 0;
}
输入例如abdh##i##e##cf##g## 程序运行错误