二叉树已经创建好了,但是不管是先,中,后序遍历,输出都是一个 ?
怎么回事?
有哪位大能能帮我看看到底是哪错了?
下面是源代码和错误演示:
```c++
#include<stdio.h>
#include<stdlib.h>
void menu()
{
printf(" 二叉树\n");
printf("1.建立二叉树\n");
printf("2.先序遍历二叉树\n");
printf("3.中序遍历二叉树\n");
printf("4.后序遍历二叉树\n");
printf("0.退出\n");
}
typedef struct BiTNode
{
char data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
void InitBiTree(BiTree& T)
{
T = new BiTNode;
T->lchild = T->rchild = NULL;
}
void CreateBiTree(BiTree T)
{
char c;
scanf_s("%c", &c);
if (c == '#')
{
T = NULL;
}
else
{
T = new BiTNode;
T->data = c;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrder(BiTree T)
{
if (T != NULL)
{
printf("%c ", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTree T)
{
if (T != NULL)
{
InOrder(T->lchild);
printf("%c ", T->data);
InOrder(T->rchild);
}
}
void PostOrder(BiTree T)
{
if (T != NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c ", T->data);
}
}
int main()
{
int choice;
BiTree T;
InitBiTree(T);
menu();
while (1)
{
printf("要进行的操作:\n");
scanf_s("%d", &choice);
switch (choice)
{
case 1:
printf("请输入二叉树节点元素(无元素用#代替):\n");
CreateBiTree(T);
printf("创建成功!\n");
break;
case 2:
PreOrder(T);
break;
case 3:
InOrder(T);
break;
case 4:
PostOrder(T);
break;
default:
printf("你的输入有误,请重新输入:\n");
}
}
return 0;
}
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/050449019356158.png "#left")