#include "stdio.h"
#include "stdlib.h"
typedef char TElemType;
#define ERROR -1;
typedef struct BitNode{
TElemType data;
struct BitNode *lchild,*rchild;//左右孩子指针
}BitNode,*BitTree;
//按先序次序输入二叉树中的结点的值(一个字符),空格字符表示空树
//构造二叉树表表示的二叉树T
void CreateBitTree(BitTree &T){
char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{ T=(BitNode *)malloc(sizeof(BitNode));
T->data=ch;//生成根结点
CreateBitTree(T->lchild);//构造左子树
CreateBitTree(T->rchild);//构造右子树
}//else
}//CreateBitTree
//访问函数——打印
int visit(TElemType e)
{ printf("%c",e);
return 1;
}//visit
//先序遍历(根->左->右),visit()访问每一个树结点
//规律:最先访问data
int PreOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T)
{
if(visit(T->data))
if(PreOrderTraverse(T->lchild,visit))
if(PreOrderTraverse(T->rchild,visit))
return 1;
}//if
else
return 1;
}//PreOrderTraverse
//中序遍历(左->根->右),visit()访问每一个树结点
//规律:在递归右指针前访问data
int InOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T)
{
if(InOrderTraverse(T->lchild,visit))
visit(T->data);
if(InOrderTraverse(T->rchild,visit))
return 1;
}//if
else
return 1;
}//InOrderTraverse
//后序遍历(左->右->根),visit()访问每一个树结点
//规律:在递归右指针后访问data
int PostOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T){
PostOrderTraverse(T->lchild,visit);
PostOrderTraverse(T->rchild,visit);
visit(T->data);
}//if
else
return 1;
}//PostOrderTraverse
void main()
{ BitTree T;
printf("请输入二叉树的结点(空格表示空树):");
CreateBitTree(T);
printf("先序遍历的二叉树输出如下:");
PreOrderTraverse(T,visit);
printf("\n");
printf("中序遍历的二叉树输出如下:");
InOrderTraverse(T,visit);
printf("\n");
printf("后序遍历的二叉树输出如下:");
PostOrderTraverse(T,visit);
printf("\n");
system("pause");
}//main
看不到图,仅限新浪交流用
分太少