#include <stdio.h>
#include <stdlib.h>
typedef char ElementType ;
struct binaryTreeNode
{
ElementType data;
struct binaryTreeNode *LeftChild,*RightChild;
};
typedef struct binaryTreeNode BinaryTreeNode;
void BTreeCreate(BinaryTreeNode **T)
{
char x;
scanf("%c",&x);
if(x == ' ')
(*T) = NULL;
else
{
(*T) = (BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));
(*T)->data = x;
/*三行printf用于检验,发现下面printf语句会发生重复,我百思不得其解,求指导*/
printf("%d\n",(*T));
printf("%d\n",(*T)->LeftChild);
printf("%d\n",(*T)->RightChild);
BTreeCreate(&((*T)->LeftChild));
BTreeCreate(&((*T)->RightChild));
}
}
void PreOrder(BinaryTreeNode *t)
{
if(t)
{
printf("%c",t->data);
PreOrder(t->LeftChild);
PreOrder(t->RightChild);
}
}
void InOrder(BinaryTreeNode *t)
{
if(t)
{
InOrder(t->LeftChild);
printf("%c",t->data);
InOrder(t->RightChild);
}
}
void PostOrder(BinaryTreeNode *t)
{
if(t)
{
PostOrder(t->LeftChild);
PostOrder(t->RightChild);
printf("%c",t->data);
}
}
int main(void)
{
BinaryTreeNode *t;
BTreeCreate(&t);
printf("\n先序:");PreOrder(t);
printf("\n后序:");InOrder(t);
printf("\n中序:");PostOrder(t);
printf("\n");
return 0;
}
输入a,编译结果
输入空格,编译结果
在
scanf("%c",&x);
后面加一句:getchar();
就可以工作了.原因是, 你每次敲的回车, 还在输入缓存里, 下一次递归, 会跳过输入过程, 直接将 x 获取为 '\n'. 所以会输出两遍...
另外, 提醒一下你.
这里写反了.
InOrder
是中序,PostOrder
是后序.