#include<stdio.h>;
#include<malloc.h>;
STUCK pNode //树的节点
{
int data;
stuck pNode * pLeft;
stuck pNode * pRight;
}
void first ( struct BTNode * pT );
void IN( struct BTNode * pT );
void BOTTOM( struct BTNode * pT );
STUCK pNode *CreateTree( void );
int main (void) //执行主程序
{
STUCK pNode * PT = CreateTree(); //将已建好树的根节点地址返回赋值给 PT
//先序
first(PT);
//中序
IN(PT);
//后序
BOTTOM(PT);
}
STUCK pNode * Greattree()//建树程序
{
STUCK pNode * pA = (STUCK pNode *)malloc(sizefo(STUCK pNode));
STUCK pNode * pB = (STUCK pNode *)malloc(sizefo(STUCK pNode));
STUCK pNode * pC = (STUCK pNode *)malloc(sizefo(STUCK pNode));
STUCK pNode * pD = (STUCK pNode *)malloc(sizefo(STUCK pNode));
STUCK pNode * pE = (STUCK pNode *)malloc(sizefo(STUCK pNode));
STUCK pNode * pF = (STUCK pNode *)malloc(sizefo(STUCK pNode));
pA -> data = 'A';
pB -> data = 'B';
pC -> data = 'C';
pD -> data = 'D';
pE -> data = 'E';
pF -> data = 'F';
pA -> pLeft = pB;
pA -> pRight = pE;
pB -> pLeft = pC;
pB -> pRight = NULL;
pC -> pLeft = NULL;
pc -> pRight = pD;
pD -> pLeft = NULL;
pD -> pRight = NULL;
pE -> pLeft = pF;
pE -> pRight = NULL;
return PA;
}
frist(stuck pNode * p)//先序遍历
{
if (NULL != p) //判断 树是否为空
{
printf("%c", p -> data) // 输出根节点
if(NULL != p -> pLeft) // 判断 根节点左子树是否为空
{ frist(p -> pLeft) }// 递归遍历左子树
if (NULL != p -> pRight)//判断右子树是否为空
{frist( p -> pRight)}// 递归遍历右子树
}
}
IN(stuck pNode * p)//中序
{
if (NULL != p)//判断树是否为空
{
if(NULL != p -> pLeft)//判断 左子树是否为空
{ frist(p -> pLeft) }//递归遍历左子树
printf("%c", p -> data)// 输出根节点
if (NULL != p -> pRight) //判断右子树是否为空
{frist( p -> pRight)}//递归遍历右子树
}
}
BOTTOM(stuck pNode * p)//后序遍历
{
if (NULL != p) //判断树是否为空
{
if(NULL != p -> pLeft)//判断左子树是否为空
{ frist(p -> pLeft) }//递归遍历左子树
if (NULL != p -> pRight)//判断右子树是否为空
{frist( p -> pRight)}//递归遍历右子树
printf("%c", p -> data)//输出根节点
}
}