typedef struct BTNode
{
char data;//存放節點
struct BTNode * pLchild;//左子樹
struct BTNode * pRchild;//右子樹
}BTNODE, * PBTNODE;code
PBTNODE CreateBTree(void);//建立二叉樹
void PreTraverseBTree(struct BTNode * pT);//先序遍歷
void InTraverseBTree(struct BTNode * pT);//中序遍歷
void PostTraverseBTree(struct BTNode * pT);//後序遍歷get
int main(void)
{
PBTNODE pBT;
pBT = CreateBTree();//返回二叉樹的地址並賦給pBT;io
PreTraverseBTree(pBT);//先序遍歷 printf("\n"); InTraverseBTree(pBT);//中序遍歷 printf("\n"); PostTraverseBTree(pBT);//後序遍歷 printf("\n"); return 0;
}二叉樹
//建立二叉樹
PBTNODE CreateBTree(void)
{
//建立單個子樹
PBTNODE pA = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pB = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pC = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pD = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pE = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pF = (PBTNODE)malloc(sizeof(BTNODE));遍歷
//二叉樹節點初始化 pA->data = 'A'; pB->data = 'B'; pC->data = 'C'; pD->data = 'D'; pE->data = 'E'; pF->data = 'F'; //關聯各個子樹,肯定各個子樹之間的關係 pA->pLchild = pB; pA->pRchild = pC; pB->pLchild = pD; pB->pRchild = pE; pC->pLchild = pF; pC->pRchild = NULL; pD->pLchild = NULL; pD->pRchild = NULL; pE->pLchild = NULL; pE->pRchild = NULL; pF->pLchild = NULL; pF->pRchild = NULL; return pA;//返回二叉樹的地址
}di
//先序遍歷,先訪問根節點,再先序訪問左子樹,再先序右子樹
//用if判斷根節點下面是否爲空,減小運算量,
void PreTraverseBTree(struct BTNode * pT)
{
if( NULL != pT)
{
printf("%c; ", pT->data);co
if(NULL != pT->pLchild) { PreTraverseBTree(pT->pLchild); } if(NULL != pT->pRchild) { PreTraverseBTree(pT->pRchild); } } return ;
}data
//中序遍歷,先序訪問左子樹,再訪問根節點,再先序右子樹
void InTraverseBTree(struct BTNode * pT)
{return
if( NULL != pT) { if(NULL != pT->pLchild) { InTraverseBTree(pT->pLchild); } printf("%c; ", pT->data); if(NULL != pT->pRchild) { InTraverseBTree(pT->pRchild); } } return ;
}void
//後序遍歷.先序左子樹,再先序右子樹,再訪問根節點
void PostTraverseBTree(struct BTNode * pT)
{
if( NULL != pT) { if(NULL != pT->pLchild) { PostTraverseBTree(pT->pLchild); } if(NULL != pT->pRchild) { PostTraverseBTree(pT->pRchild); } printf("%c; ", pT->data); } return ;
}