二叉树的遍历(C语言,先序,中序,后序,层序)

层序遍历见本博客:
https://blog.51cto.com/sndapk/3123569markdown

如下面二叉树为例:
二叉树的遍历(C语言,先序,中序,后序,层序)ide

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct BTNode {
    char data;
    struct BTNode *pLchild;
    struct BTNode *pRchild;

}BTNODE, *PBTNODE;

PBTNODE CreateTree(void);
void preTraverse(PBTNODE);
void intTraverse(PBTNODE);
void postTraverse(PBTNODE);

void preTraverse(PBTNODE BTree) {
    if (NULL != BTree) {
        printf("%c\n", BTree->data);
        preTraverse(BTree->pLchild);
        preTraverse(BTree->pRchild);
    }
}

void intTraverse(PBTNODE BTree) {
    if (NULL != BTree) {
        intTraverse(BTree->pLchild);
        printf("%c\n", BTree->data);
        intTraverse(BTree->pRchild);
    }
}

void postTraverse(PBTNODE BTree) {
    if (NULL != BTree) {
        postTraverse(BTree->pLchild);
        postTraverse(BTree->pRchild);
        printf("%c\n", BTree->data);
    }
}

PBTNODE CreateTree(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));
    PBTNODE pG = (PBTNODE)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;
}

int main(void)
{
    PBTNODE pT = CreateTree();
    printf("先序遍历结果:\n");
    preTraverse(pT);
    printf("中序遍历结果:\n");
    intTraverse(pT);
    printf("后序遍历结果:\n");
    postTraverse(pT);

    return 0;
}

output:post

[root@8be225462e66 c]# gcc btree_1.c && ./a.out
先序遍历结果:
A
B
C
D
E
中序遍历结果:
B
A
D
E
C
后序遍历结果:
B
E
D
C
A
[root@8be225462e66 c]#