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 ;
}