下面是纠结了好久完成的,还是没有完全理解树的概念所致:
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree Creat(BiTree p);
void preorder(BiTree p);
void inorder(BiTree p);
void postorder(BiTree p);
int main()
{
BiTree T;
T = Creat(T);
preorder(T);
printf("\n");
inorder(T);
printf("\n");
postorder(T);
printf("\n");
system("pause");
return 0;
}
BiTree Creat(BiTree p)//创建二叉树
{
char ch;
ch = getchar();//在输入的时候,由于创建时是按照先序的,所以输入时应该按先序输入
if(ch == '#')
p = NULL;
else
{
if(!(p = (BiTNode *)malloc(sizeof(BiTNode))))
printf("Error!\n");
p->data = ch;
p->lchild = Creat(p->lchild);
p->rchild = Creat(p->rchild);
}
return p;
}
void preorder(BiTree p)// 先序遍历
{
if(p)
{
printf("%c",p->data);
preorder(p->lchild);
preorder(p->rchild);
}
}
void inorder(BiTree p)// 中序遍历
{
if(p)
{
inorder(p->lchild);
printf("%c",p->data);
inorder(p->rchild);
}
}
void postorder(BiTree p)// 后序遍历
{
if(p)
{
postorder(p->lchild);
postorder(p->rchild);
printf("%c",p->data);
}
}
自己学会建立二叉树,否则在输入时无法正常输出,我刚开始就烦了这样的错……