#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'. 所以会输出两遍...
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。