層序遍歷見本博客:
https://blog.51cto.com/sndapk/3123569markdown
如下面二叉樹爲例: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]#