C语言,数据结构,二叉树的递归构造,求大神教导,使其正常运行。
#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,编译结果
输入空格,编译结果
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在
scanf("%c",&x);
后面加一句:getchar();
就可以工作了.原因是, 你每次敲的回车, 还在输入缓存里, 下一次递归, 会跳过输入过程, 直接将 x 获取为 '\n'. 所以会输出两遍...
另外, 提醒一下你.
这里写反了.
InOrder
是中序,PostOrder
是后序.我打断点简单测了一下,符合我的猜想,即:
先执行
//执行LeftChild的创建,进入第二次递归
//第二次递归,没有输入,if 判断不符合,在else到printf之间循环递归
作业还是要自己做,其他的帮不了
一开始就来讨论并不好...