#include
#include
#define MaxNode 100
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode;
typedef BiTNode* BiTree;
BiTree CreateTree()
{
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='#') {T=NULL;}
else { T=(BiTNode*)malloc(sizeof(BiTNode));
if(!T)exit(1);
T->data=ch;
T->lchild=CreateTree();
T->rchild=CreateTree();
}
return T;
}
void PreOrderTree(BiTree root)
{
if(root==NULL)return;
printf("%c",root->data);
PreOrderTree(root->lchild);
PreOrderTree(root->rchild);
}
void InOrderTree(BiTree root)
{
if(root==NULL)return;
InOrderTree(root->lchild);
printf("%c",root->data);
InOrderTree(root->rchild);
}
void LaOrderTree(BiTree root)
{
if(root==NULL)return;
LaOrderTree(root->lchild);
LaOrderTree(root->rchild);
printf("%c",root->data);
}
void main()
{
int j=1;
BiTree t=NULL;
while(j)
{
printf("\n");
printf("1: 建立一棵二叉树\n");
printf("2: 二叉树的前序遍历\n");
printf("3: 二叉树的中序遍历\n");
printf("4: 二叉树的后序遍历\n");
printf("0: 结束\n");
printf("请选择操作:");
scanf("%d",&j);
getchar();
switch(j)
{
case 0: printf(" 结束!\n ");break;
case 1: printf("请按先序遍历输入一个二叉树:");t=CreateTree();break;
case 2: printf("先序遍历结果:"); PreOrderTree(t); break;
case 3: printf("中序遍历结果:"); InOrderTree(t); break;
case 4: printf("后序遍历结果:"); LaOrderTree(t); break;
default : printf("\n输入无效,请重新选择操作!" );
}
}
}
正确代码如上。
1、
case 1: printf("请按先序遍历输入一个二叉树:"); CreateTree();t=CreateTree();break;
这一行多了一句
2、在输入选择的数字后,要getchar();来获取回车,不然回车也会计算到后面建立BiTree里面。
例如输入:ab#c###
case 1: printf("请按先序遍历输入一个二叉树:"); CreateTree();t=CreateTree();break;
这一行多了一句,
应为:
case 1: printf("请按先序遍历输入一个二叉树:"); t=CreateTree();break;