以该树为例
#include<stdio.h>
#include<malloc.h>
typedef struct BTNode{
int data;
struct BTNode *pLchild;//P是指针,L是左
struct BTNode *pRchild;
}BTNode;
BTNode *CreateBTree(void);
void PreTraverseBTree(BTNode *);
void InTraverseBTree(BTNode *);
void PosTraverseBTree(BTNode *);
int main(void)
{
BTNode *pT=CreateBTree();
PreTraverseBTree(pT);//先序遍历-先访问根节点,再先序访问左子树,再先序访问右子树
InTraverseBTree(pT);//中序遍历
PosTraverseBTree(pT);//后序遍历
return 0;
}
BTNode *CreateBTree(void)
{
BTNode *pA=(BTNode *)malloc(sizeof(BTNode));
BTNode *pB=(BTNode *)malloc(sizeof(BTNode));
BTNode *pC=(BTNode *)malloc(sizeof(BTNode));
BTNode *pD=(BTNode *)malloc(sizeof(BTNode));
BTNode *pE=(BTNode *)malloc(sizeof(BTNode));
pA->data='A';
pB->data='B';
pC->data='C';
pD->data='D';
pE->data='E';
pA->pLchild=pB;
pA->pRchild=pC;
pB->pLchild=pB->pRchild=NULL;
pC->pLchild=pD;
pC->pRchild=NULL;
pD->pLchild=NULL;
pD->pRchild=pE;
pE->pLchild=pE->pRchild=NULL;
return pA;
}
void PreTraverseBTree(BTNode *pT)
{
if(pT!=NULL)
printf("%c\n",pT->data);
if(pT->pLchild!=NULL)
PreTraverseBTree(pT->pLchild);
if(pT->pRchild!=NULL)
PreTraverseBTree(pT->pRchild);
}
void InTraverseBTree(BTNode *pT)
{ if(pT!=NULL){
if(pT->pLchild!=NULL)
InTraverseBTree(pT->pLchild);
printf("%c\n",pT->data);
if(pT->pRchild!=NULL)
InTraverseBTree(pT->pRchild);
}
}
void PosTraverseBTree(BTNode *pT)
{
if(pT!=NULL){
if(pT->pLchild!=NULL)
PosTraverseBTree(pT->pLchild);
if(pT->pRchild!=NULL)
PosTraverseBTree(pT->pRchild);
printf("%c\n",pT->data);
}
}