二叉树的建立与先序中序后序遍历

代码摘自郝斌老师的数据结构视频

建立如下图所示的二叉树:

代码如下:

#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