有关创建二叉树的时函数无法终止的问题
为了深入掌握数据结构,我编写了二叉树的程序,包括其先序创建和先序遍历函数,
例如要建立如下二叉树:
A
/ \
B C
运行时按先序遍历依次输入AB##C##,其中#表示空子树。
可是在运行时,字符已输入完毕,创建函数却无法终止。
程序编译正确,无错误和警告。这个问题已困扰我多天,请高手出手相助。
程序如下:
#include <stdlib.h>
#define OK 1
#define ERROR 1
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
int CreateBiTree(BiTree T)
{
char ch;
scanf("%c%c",&ch);/*不采用%c%c的话,下一次递归时将上一次的回车符作为输入*/
if(ch=='#') T=NULL;
else {
T=(BiTNode *)malloc(sizeof(BiTNode));
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
void preorder(BiTree p)
{
if(p!=NULL)
{
printf("%6c",p->data);
preorder(p->lchild);
preorder(p->rchild);
}
}
void main()
{
BiTree T=NULL;
CreateBiTree(T);
preorder(T);
}