为什么我写的二叉树代码,会一直要输入元素,无法终止?
救命,有哪位大能能帮我看看到底是哪错了!
下面是我的全部代码:
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
void menu()
{
printf(" 二叉树\n");
printf("1.建立二叉树\n");
printf("2.先序遍历二叉树\n");
printf("3.中序遍历二叉树\n");
printf("4.后序遍历二叉树\n");
printf("0.退出\n");
}
typedef struct BiTNode
{
ElemType data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
void InitBiTree(BiTree& T)
{
T = new BiTNode;
T->lchild = T->rchild = NULL;
}
bool CreateBiTree(BiTree T)
{
char c;
scanf_s("%c", &c);
if (c == '#')
{
T = NULL;
return true;
}
T = new BiTNode;
T->data = c;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
return true;
}
void PreOrder(BiTree T)
{
if (T == NULL)
return;
printf("%c ", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
void InOrder(BiTree T)
{
if (T == NULL)
return;
InOrder(T->lchild);
printf("%c ", T->data);
InOrder(T->rchild);
}
void PostOrder(BiTree T)
{
if (T == NULL)
return;
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c ", T->data);
}
int main()
{
int choice;
BiTree T;
InitBiTree(T);
menu();
printf("要进行的操作:\n");
scanf_s("%d", &choice);
while (1)
{
switch (choice)
{
case 1:
printf("请输入二叉树节点元素(无元素用#代替):\n");
CreateBiTree(T);
break;
case 2:
PreOrder(T);
break;
case 3:
InOrder(T);
break;
case 4:
PostOrder(T);
break;
default:
printf("你的输入有误,请重新输入:\n");
}
}
return 0;
}