1.先序,中序,后序递归实现
#include <stdio.h>#include <stdlib.h>struct TreeNode{char Data;struct TreeNode *Left;struct TreeNode *Right;};struct TreeNode * CreateBinTree(void);void InorderTraversal( struct TreeNode * BT );void PreorderTraversal( struct TreeNode * BT );void PostorderTraversal( struct TreeNode * BT );int main(void){struct TreeNode *pT = CreateBinTree();printf("先序遍历:\n");PreorderTraversal(pT);printf("中序遍历:\n");InorderTraversal(pT);printf("后序遍历:\n");PostorderTraversal(pT);free(pT);return 0;}struct TreeNode * CreateBinTree(void){struct TreeNode *pA = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pB = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pC = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pD = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pE = (struct TreeNode *)malloc(sizeof(TreeNode));pA->Data = 'A';pB->Data = 'B';pC->Data = 'C';pD->Data = 'D';pE->Data = 'E';pA->Left = pB;pA->Right = pC;pB->Left = NULL;pB->Right = NULL;pC->Left = pD;pC->Right = NULL;pD->Left = NULL;pD->Right = pE;pE->Left = NULL;pE->Right = NULL;return pA;}void PreorderTraversal( struct TreeNode * BT ){if( BT ){printf("%c\n", BT->Data );PreorderTraversal( BT->Left );PreorderTraversal( BT->Right );}}void InorderTraversal( struct TreeNode * BT ){if( BT ){InorderTraversal( BT->Left );printf("%c\n", BT->Data);InorderTraversal( BT->Right );}}void PostorderTraversal( struct TreeNode * BT ){if( BT ){PostorderTraversal( BT->Left );PostorderTraversal( BT->Right );printf("%c\n", BT->Data);}}
2.层序遍历
#include <stdio.h>#include <stdlib.h>#define MaxSize 100struct TreeNode{int Data;struct TreeNode *Left;struct TreeNode *Right;};struct QNode{struct TreeNode * Data[MaxSize];int rear;int front;};typedef struct QNode *Queue;struct TreeNode * CreateBinTree(void);Queue CreatQueue();void AddQ(Queue Q, struct TreeNode * X);bool IsFull(Queue Q);bool IsEmpty(Queue Q);struct TreeNode * Delete(Queue Q);void LevelorderTraversal ( struct TreeNode * BT );int main(void){struct TreeNode *pT = CreateBinTree();printf("层序遍历:\n");LevelorderTraversal(pT);free(pT);return 0;}struct TreeNode * CreateBinTree(void){struct TreeNode *pA = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pB = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pC = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pD = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pE = (struct TreeNode *)malloc(sizeof(TreeNode));pA->Data = 5;pB->Data = 6;pC->Data = 7;pD->Data = 8;pE->Data = 9;pA->Left = pB;pA->Right = pC;pB->Left = NULL;pB->Right = NULL;pC->Left = pD;pC->Right = NULL;pD->Left = NULL;pD->Right = pE;pE->Left = NULL;pE->Right = NULL;return pA;}Queue CreatQueue(){Queue Q;Q = (Queue)malloc(sizeof(struct QNode));Q->rear = -1;Q->front = -1;return Q;}void AddQ(Queue Q, struct TreeNode * X){if(IsFull(Q)){printf("已满");return ;}else{Q->rear = ((Q->rear) + 1) % MaxSize;Q->Data[Q->rear] = X;}}bool IsFull(Queue Q){return (((Q->rear) + 1) % MaxSize ) == Q->front;}bool IsEmpty(Queue Q){return (Q->front == Q->rear);}struct TreeNode * Delete(Queue Q){if(IsEmpty(Q)){printf("队空");return NULL;}else{Q->front = (Q->front + 1) % MaxSize;return Q->Data[Q->front];}}void LevelorderTraversal ( struct TreeNode * BT ){Queue Q;struct TreeNode * T;if ( !BT )return;Q = CreatQueue();AddQ( Q, BT );while ( !IsEmpty(Q) ) {T = Delete( Q );printf("%d\n", T->Data);if ( T->Left ) AddQ( Q, T->Left );if ( T->Right ) AddQ( Q, T->Right );}}
