线索二叉树 运行时程序错误求助各位大神

wangjunloveyangwen 2014-04-04 02:34:00
#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## 程序运行错误
...全文
47 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧