第一种:
#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>
//#include <windows.h>
typedef struct node
{
char data;
struct node *lchild,*rchild;
}BiNode,*BiTree;
BiTree CreatBiTree()
{
char a;
BiTree T;
scanf("%c",&a);
if(a==' ')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiNode));
T->data=a;
T->lchild=CreatBiTree();
T->rchild=CreatBiTree();
}
return T;
}
void PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
main()
{
BiTree T;
//clrscr();
T=CreatBiTree();
printf("先序遍历为:\n");
PreOrderTraverse(T);
printf("\n");
printf("中序遍历为:\n");
InOrderTraverse(T);
printf("\n");
printf("后序遍历为:\n");
PostOrderTraverse(T);
printf("\n");
}
第二种:
typedef struct node
{
char data;
struct node *lchild,*rchild;
}BiNode,*BiTree;
void CreatBiTree(BiTree *T)
{
char a;
scanf("%c",&a);
if(a==' ')
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BiNode));
(*T)->data=a;
CreatBiTree(&((*T)->lchild));
CreatBiTree(&((*T)->rchild));
}
}
void PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
main()
{
BiTree T;
CreatBiTree(&T);
printf("先序遍历为:\n");
PreOrderTraverse(T);
printf("\n");
printf("中序遍历为:\n");
InOrderTraverse(T);
printf("\n");
printf("后序遍历为:\n");
PostOrderTraverse(T);
printf("\n");
}