代码摘自郝斌老师的数据结构视频
建立如下图所示的二叉树:
代码如下:
#include <stdio.h>
#include <malloc.h>
struct BTNode {
int data;
struct BTNode * pLchild; //p是指针 L是左 child是孩子
struct BTNode * pRchild;
};
//函数声明
BTNode * CreateBTree();
void PreTraverseBTree(BTNode * pT);
void InTraverseBTree(BTNode * pT);
void PostTraverseBTree(BTNode * pT);
int main(void)
{
BTNode *pT = CreateBTree();
PreTraverseBTree(pT); //先序遍历
//InTraverseBTree(pT); //中序遍历
//PostTraverseBTree(pT); //后序遍历
return 0;
}
void PreTraverseBTree(BTNode * pT)
{
if(NULL != pT) {
printf("%c\n", pT->data);
if(NULL != pT->pLchild)
PreTraverseBTree(pT->pLchild);
if(NULL != pT->pRchild)
PreTraverseBTree(pT->pRchild);
}
}
void InTraverseBTree(BTNode * pT)
{
if(NULL != pT) {
if(NULL != pT->pLchild)
InTraverseBTree(pT->pLchild);
printf("%c\n", pT->data);
if(NULL != pT->pRchild)
InTraverseBTree(pT->pRchild);
}
}
void PostTraverseBTree(BTNode * pT)
{
if(NULL != pT) {
if(NULL != pT->pLchild)
PostTraverseBTree(pT->pLchild);
if(NULL != pT->pRchild)
PostTraverseBTree(pT->pRchild);
printf("%c\n", pT->data);
}
}
BTNode * CreateBTree()
{
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;
}
先序遍历,中序遍历和后序遍历其实就是根结点的先后输出顺序不一样。
如上的二叉树不同方式遍历结果如下
先序遍历:ABCDE
中序遍历:BADEC
后序遍历:BEDCA