#include <stdio.h>
#include <stdlib.h>
#define OVERFLOW 0
typedef struct Node
{
char data;
struct Node *lchild,*rchild;
} Node,*BiTree;
BiTree Create(BiTree T)//以先序遍历的方法构造二叉树
{
char c;
scanf("%c",&c);
if(c == '#')
{
T = NULL;
}
else
{
T = (BiTree)malloc(sizeof(Node));
if(T == NULL)
{
exit(OVERFLOW);
}
T -> data = c;
T -> lchild = Create(T -> lchild);
T -> rchild = Create(T -> rchild);
}
return T;
}
void PreOrder(BiTree T)//先序遍历
{
if(T)
{
printf("%c",T -> data);
PreOrder(T -> lchild);
PreOrder(T -> rchild);
}
}
void InOrder(BiTree T)//中序遍历
{
if(T)
{
InOrder(T -> lchild);
printf("%c",T -> data);
InOrder(T -> rchild);
}
}
void PostOrder(BiTree T)//后序遍历
{
if(T)
{
PostOrder(T -> lchild);
PostOrder(T -> rchild);
printf("%c",T -> data);
}
}
int main()
{
printf("请输入二叉树的先序遍历,以#代替空\n");
BiTree T = NULL;
T = Create(T);
printf("先序遍历结果:");
PreOrder(T);
printf("\n");
printf("中序遍历结果:");
InOrder(T);
printf("\n");
printf("后序遍历结果:");
PostOrder(T);
printf("\n");
return 0;
}
比如一个二叉树先序遍历为:ABDECFG
中序遍历为:DBEACGF
想象这棵二叉树为满二叉树,对于那些实际不存在的结点,用#代替
则应该输入:ABD##E##C#FG###