C语言先序建立二叉树(如何结束输入)

下边是完整的代码,我的疑问是在建树完毕后如何结束输入,比如我先序建立的二叉树就三个结点,a,b,c;a是头结点,b是左孩子, c是右孩子,我输完a,b,c之后不想再往黑框里输了,我现在想先序遍历它,可是黑框里的光标还在闪烁,使得我不得不继续往下输入,什么时候是个头啊

#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}
BiTNode,*BiTree;
BiTree CreateBiTree()//在BiTree CreateBiTree()
{
char p;BiTree T;
scanf("%c",&p);
if(p==' ')
T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
T->data=p;
T->lchild=CreateBiTree();
T->rchild=CreateBiTree();
}
return (T);
}
void PreOrder(BiTree T)
{
if(T!=NULL)
{
printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTree T)
{
if(T!=NULL)
{
InOrder(T->lchild);
printf("%c",T->data);
InOrder(T->rchild);
}
}
void PostOrder(BiTree T)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
}
void main()
{
BiTree Ta;
Ta=CreateBiTree();
printf("先序遍历:");
printf("\n");
PreOrder(Ta);
printf("\n");
printf("中序遍历:");
printf("\n");
InOrder(Ta);
printf("\n");
printf("后序遍历:");
printf("\n");
PostOrder(Ta);
}
谁能教给我该怎么往黑框里边输入元素才能结束?谢谢了!!!

你的算法没啥大问题,毕竟是教材上的嘛。但咱就是说,你是不是当成单链表来输入了。。。要根据二叉树的结构来啊。
输入二叉树不像输入单链表那样输完加上一个终止符' '(空格)就行,而可能需要多个终止符,因为树有多个结尾处。这说得可能比较抽象,下面以你连续输入a,b,c为例。首先根据你的代码,输入方式类似前序遍历,那么系统会将b写为a的左孩子、c写为b的左孩子,接下来的一个' '仅表示c的左子树为空,而不代表整棵树结束(你以为结束了)——接下来来到c的右子树,需要第二个' '表明c的右子树为空,其次还有b的右子树、a的右子树需要' '来结束。(所以总计需要四个' ',才能结束输入)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-06
As you stated, the only way is to enter SPACE for each leaf node.
Otherwise you have to modify the code
第2个回答  2012-08-06
每到一个叶子节点要接着输两个空格

ab c
第3个回答  2012-08-05
输入空格试试追问

不行。。。

追答

额 你要 输入很多的空格,每个叶子节点要两次 空格输入,明白了吗
从你的程序上看来时这样的
if(p==' ')
T=NULL;

......
return (T);
}

这就是你的程序里的结束条件了

本回答被提问者采纳