主题:线索二叉树的C语言程序
#include"stdio.h"
#include"stdlib.h"
typedef struct node
{
char data;
struct node *LChild,*RChild;
int Ltag,Rtag;
}Bitree;
Bitree *CreatBitree()
{
Bitree *bt;
char ch;
scanf("%c",&ch);
if(ch=='#')
bt=NULL;
else
{
bt=(Bitree*)malloc(sizeof(Bitree));
bt->data=ch;
bt->LChild=CreatBitree();
bt->RChild=CreatBitree();
}
return bt;
}
void Inthread(Bitree *bt)
{
Bitree *pre;
if(bt!=NULL)
{
Inthread(bt->LChild);
if(bt->LChild==NULL)
{
bt->Ltag=1;
bt->LChild=pre;
}
}
if(pre!=NULL&&pre->RChild==NULL)
{
pre->RChild=bt;
}
pre=bt;
Inthread(bt->RChild);
}
void InPS(Bitree *p)
{
Bitree *pre,*succ,*q;
if(p->Ltag==1)
pre=p->LChild;
else
for(q=p->LChild;q->Rtag==0;q=q->RChild)
{
pre=q;
printf("%c",pre);
}
if(p->Rtag==1)
succ=p->RChild;
else
for(q=p->RChild;p->Ltag==0;q=q->LChild)
{
succ=q;
printf("%c",succ);
}
}
void visit(Bitree *bt)
{
printf("%5c",bt->data);
}
void Inorder(Bitree *bt)
{
if(bt!=NULL)
{
Inorder(bt->LChild);
visit(bt);
Inorder(bt->RChild);
}
}
int main()
{
Bitree *bi;
printf("please input node:\n");
bi=CreatBitree();
printf("\n");
printf("the inorder of the tree is:\n");
Inorder(bi);
printf("\n");
Inthread(bi);
InPS(bi);
printf("\n");
return 0;
}
这是一个线索二叉树的C语言版的程序,运行没有错,但不能执行,我不会调试,程序的主要问题好象出在Inthread()那个函数里,我把它删除了就没事了,但我写的那个用来找前驱后继结点的那个InPS()函数也好象没有起作用,但我检查了很久都不知道应该怎么改,请各位高手指导小猪一下!多谢!
#include"stdlib.h"
typedef struct node
{
char data;
struct node *LChild,*RChild;
int Ltag,Rtag;
}Bitree;
Bitree *CreatBitree()
{
Bitree *bt;
char ch;
scanf("%c",&ch);
if(ch=='#')
bt=NULL;
else
{
bt=(Bitree*)malloc(sizeof(Bitree));
bt->data=ch;
bt->LChild=CreatBitree();
bt->RChild=CreatBitree();
}
return bt;
}
void Inthread(Bitree *bt)
{
Bitree *pre;
if(bt!=NULL)
{
Inthread(bt->LChild);
if(bt->LChild==NULL)
{
bt->Ltag=1;
bt->LChild=pre;
}
}
if(pre!=NULL&&pre->RChild==NULL)
{
pre->RChild=bt;
}
pre=bt;
Inthread(bt->RChild);
}
void InPS(Bitree *p)
{
Bitree *pre,*succ,*q;
if(p->Ltag==1)
pre=p->LChild;
else
for(q=p->LChild;q->Rtag==0;q=q->RChild)
{
pre=q;
printf("%c",pre);
}
if(p->Rtag==1)
succ=p->RChild;
else
for(q=p->RChild;p->Ltag==0;q=q->LChild)
{
succ=q;
printf("%c",succ);
}
}
void visit(Bitree *bt)
{
printf("%5c",bt->data);
}
void Inorder(Bitree *bt)
{
if(bt!=NULL)
{
Inorder(bt->LChild);
visit(bt);
Inorder(bt->RChild);
}
}
int main()
{
Bitree *bi;
printf("please input node:\n");
bi=CreatBitree();
printf("\n");
printf("the inorder of the tree is:\n");
Inorder(bi);
printf("\n");
Inthread(bi);
InPS(bi);
printf("\n");
return 0;
}
这是一个线索二叉树的C语言版的程序,运行没有错,但不能执行,我不会调试,程序的主要问题好象出在Inthread()那个函数里,我把它删除了就没事了,但我写的那个用来找前驱后继结点的那个InPS()函数也好象没有起作用,但我检查了很久都不知道应该怎么改,请各位高手指导小猪一下!多谢!