这是我们要求:
这是我遇到的bug然后问题就是进入递归时第一次进入递归没办法从键盘输入值,得第二次才可以从键盘输入值这样就导致了会打印两篇printf
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char data ;
struct Node *L ;
struct Node * r;
}BiTNode,*BiTree ;
//建立二叉链表方式存储二叉树
void CreateBiTree(BiTree *bt)
{
char ch;
printf("请输入节点的值:");//节点值为字符
scanf("%c",&ch);
if (ch == '.')
{
*bt = NULL;
}
else
{
*bt = (BiTree)malloc(sizeof(BiTNode));
(*bt)->data = ch;
(*bt)->L = NULL; // 需要将左右子树初始化为空
(*bt)->r = NULL;
CreateBiTree(&((*bt)->L));
CreateBiTree(&((*bt)->r));
}
}
//先序
void PreOrder(BiTree root)
{
if(root!=NULL)
{
printf("%c",root->data);
PreOrder(root->L);
PreOrder(root->r);
}
}
//中序
void InOrder(BiTree root)
{
if(root!=NULL)
{
InOrder(root->L);
printf("%c",root->data);
InOrder(root->r);
}
}
//后序
void PostOrder(BiTree root)
{
if(root!=NULL)
{
PostOrder(root->L);
PostOrder(root->r);
printf("%c",root->data);
}
}
int main()
{
BiTree root;
printf("二叉链表:\n");
CreateBiTree(&root);
printf("先序\n");
PreOrder(root);
printf("\n中序");
InOrder(root);
printf("\n后序");
PostOrder(root);
system("pause");
return 0;
}
以上是我的代码