问题描述:在用扩展的先序遍历序列动态生成二叉树时,树的节点信息已经全部输入
但是输入提示仍然存在,即可以无限的输入。
问题代码:
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#define OVERFLOW -1
typedef struct BiTNode
{
char data;
struct BiTNode *rchild,*lchild;
} BiTNode,*BiTree;
void PreOrderCreate(BiTree & T)
{//操作前提:已经生成二叉树的扩展线序先序序列
//即度小于2的节点的孩子用字符'.'表示。
//操作结果:动态生成一棵根节点指针为T的二叉树。
char ch=getchar();
while(ch=='\n')
ch=getchar();
if(ch == '.' )
{
T=NULL;
}
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)
exit(OVERFLOW);
T->data=ch;
PreOrderCreate(T->lchild);
PreOrderCreate(T->rchild);
}
}
int main()
{
BiTree T;
PreOrderCreate(T);
return 0;
}
问题解决:在创建二叉树函数中的变量ch的定义下添加了一个while循环。
错误原因:getchar()是标准I/O函数。使用的是缓冲输入。getchar读取每个字符,包括空格,制表符,
换行符,因此从缓冲区读取的换行符导致程序出错。
程序块积累:while(ch=getchar() != '\n') //每行只读取第一个字符。
continue;