# include <stdio.h>
# include <malloc.h>
typedef struct TNode{
char data;
struct TNode * pL_child;
struct TNode * pR_child;
} NODE, * pNODE;
struct TNode * Create_tree();
void Pre_traverse(pNODE);
void IN_traverse(pNODE);
void Post_traverse(pNODE);
int main (void){
pNODE pNode = Create_tree();
Pre_traverse(pNode);
printf("\n");
IN_traverse(pNode);
printf("\n");
Post_traverse(pNode);
return 0;
}
struct TNode * Create_tree(){
pNODE pA = (pNODE) malloc(sizeof(NODE));
pNODE pB = (pNODE) malloc(sizeof(NODE));
pNODE pC = (pNODE) malloc(sizeof(NODE));
pNODE pD = (pNODE) malloc(sizeof(NODE));
pNODE pE = (pNODE) malloc(sizeof(NODE));
pA->data = 'A';
pB->data = 'B';
pC->data = 'C';
pD->data = 'D';
pE->data = 'E';
pA->pL_child = pB;
pA->pR_child = pC;
pB->pL_child = NULL;
pB->pR_child = NULL;
pC->pL_child = pD;
pC->pR_child = NULL;
pD->pL_child = NULL;
pD->pR_child = pE;
pE->pL_child = NULL;
pE->pR_child = NULL;
return pA;
}
void Pre_traverse(pNODE pNode){
/*
* 先 访问 根节点
* 再 先序 访问 左子树
* 再 先序 访问 右子树
*/
if(NULL != pNode){
printf("%c\t", pNode->data);
if(NULL != pNode->pL_child){
Pre_traverse(pNode->pL_child);
}
if(NULL != pNode->pR_child){
Pre_traverse(pNode->pR_child);
}
}
}
void IN_traverse(pNODE pNode){
if(NULL != pNode){
if(NULL != pNode->pL_child){
IN_traverse(pNode->pL_child);
}
printf("%c\t", pNode->data);
if(NULL != pNode->pR_child){
IN_traverse(pNode->pR_child);
}
}
}
void Post_traverse(pNODE pNode){
if(NULL != pNode){
if(NULL != pNode->pL_child){
Post_traverse(pNode->pL_child);
}
if(NULL != pNode->pR_child){
Post_traverse(pNode->pR_child);
}
printf("%c\t", pNode->data);
}
}