前序遍历创建二叉树输入:ABC空格空格D空格空格E空格F空格空格
按回车之后没有显示结果而是可以继续输入,但是这个二叉树已经输入完成了,为什么会出现这样的问题呢
#include <stdio.h>
#include <stdlib.h>
typedef char elemtype;
typedef enum {Link,Thread} PointerTag;
typedef struct BiThrNode
{
char data;
struct BiThrNode *lchild,*rchild;
PointerTag ltag,rtag;
}BiThrNode,*BiThrTree;
BiThrTree pre;
void creatBiThrTree(BiThrTree *T)
{
char c;
scanf("%c",&c);
if(' '==c)
{
*T=NULL;
}
else
{
*T=(BiThrNode*)malloc(sizeof(BiThrNode));
(*T)->data=c;
(*T)->ltag=Link;
(*T)->rtag=Link;
creatBiThrTree(&(*T)->lchild);
creatBiThrTree(&(*T)->rchild);
}
}
void InThreading(BiThrTree T)
{
if(T)
{
InThreading(T->lchild);
if(!T->lchild)
{
T->ltag=Thread;
T->lchild=pre;
}
if(!pre->rchild)
{
pre->rtag=Thread;
pre->rchild=T;
}
pre=T;
InThreading(T->rchild);//µÝ¹éÓÒº¢×ÓÏßË÷»¯
}
}
void InOrderThreading(BiThrTree *p,BiThrTree T)
{
*p=(BiThrTree)malloc(sizeof(BiThrNode));
(*p)->ltag=Link;
(*p)->rtag=Thread;
(*p)->rchild=*p;
if(!T)
{
(*p)->lchild=*p;
}
else
{
(*p)->lchild=T;
pre=*p;
InThreading(T);
pre->rchild=*p;
pre->rtag=Thread;
(*p)->rchild=pre;
}
}
void InOrderTraverse(BiThrTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
}
int main(int argc, char *argv[]) {
BiThrTree P,T;
T==NULL;
creatBiThrTree(&T);
InOrderThreading(&P,T);
InOrderTraverse(P);
return 0;
}