1.先序,中序,后序递归实现

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. struct TreeNode
    4. {
    5. char Data;
    6. struct TreeNode *Left;
    7. struct TreeNode *Right;
    8. };
    9. struct TreeNode * CreateBinTree(void);
    10. void InorderTraversal( struct TreeNode * BT );
    11. void PreorderTraversal( struct TreeNode * BT );
    12. void PostorderTraversal( struct TreeNode * BT );
    13. int main(void)
    14. {
    15. struct TreeNode *pT = CreateBinTree();
    16. printf("先序遍历:\n");
    17. PreorderTraversal(pT);
    18. printf("中序遍历:\n");
    19. InorderTraversal(pT);
    20. printf("后序遍历:\n");
    21. PostorderTraversal(pT);
    22. free(pT);
    23. return 0;
    24. }
    25. struct TreeNode * CreateBinTree(void)
    26. {
    27. struct TreeNode *pA = (struct TreeNode *)malloc(sizeof(TreeNode));
    28. struct TreeNode *pB = (struct TreeNode *)malloc(sizeof(TreeNode));
    29. struct TreeNode *pC = (struct TreeNode *)malloc(sizeof(TreeNode));
    30. struct TreeNode *pD = (struct TreeNode *)malloc(sizeof(TreeNode));
    31. struct TreeNode *pE = (struct TreeNode *)malloc(sizeof(TreeNode));
    32. pA->Data = 'A';
    33. pB->Data = 'B';
    34. pC->Data = 'C';
    35. pD->Data = 'D';
    36. pE->Data = 'E';
    37. pA->Left = pB;
    38. pA->Right = pC;
    39. pB->Left = NULL;
    40. pB->Right = NULL;
    41. pC->Left = pD;
    42. pC->Right = NULL;
    43. pD->Left = NULL;
    44. pD->Right = pE;
    45. pE->Left = NULL;
    46. pE->Right = NULL;
    47. return pA;
    48. }
    49. void PreorderTraversal( struct TreeNode * BT )
    50. {
    51. if( BT )
    52. {
    53. printf("%c\n", BT->Data );
    54. PreorderTraversal( BT->Left );
    55. PreorderTraversal( BT->Right );
    56. }
    57. }
    58. void InorderTraversal( struct TreeNode * BT )
    59. {
    60. if( BT )
    61. {
    62. InorderTraversal( BT->Left );
    63. printf("%c\n", BT->Data);
    64. InorderTraversal( BT->Right );
    65. }
    66. }
    67. void PostorderTraversal( struct TreeNode * BT )
    68. {
    69. if( BT )
    70. {
    71. PostorderTraversal( BT->Left );
    72. PostorderTraversal( BT->Right );
    73. printf("%c\n", BT->Data);
    74. }
    75. }

    2.层序遍历

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #define MaxSize 100
    4. struct TreeNode
    5. {
    6. int Data;
    7. struct TreeNode *Left;
    8. struct TreeNode *Right;
    9. };
    10. struct QNode
    11. {
    12. struct TreeNode * Data[MaxSize];
    13. int rear;
    14. int front;
    15. };
    16. typedef struct QNode *Queue;
    17. struct TreeNode * CreateBinTree(void);
    18. Queue CreatQueue();
    19. void AddQ(Queue Q, struct TreeNode * X);
    20. bool IsFull(Queue Q);
    21. bool IsEmpty(Queue Q);
    22. struct TreeNode * Delete(Queue Q);
    23. void LevelorderTraversal ( struct TreeNode * BT );
    24. int main(void)
    25. {
    26. struct TreeNode *pT = CreateBinTree();
    27. printf("层序遍历:\n");
    28. LevelorderTraversal(pT);
    29. free(pT);
    30. return 0;
    31. }
    32. struct TreeNode * CreateBinTree(void)
    33. {
    34. struct TreeNode *pA = (struct TreeNode *)malloc(sizeof(TreeNode));
    35. struct TreeNode *pB = (struct TreeNode *)malloc(sizeof(TreeNode));
    36. struct TreeNode *pC = (struct TreeNode *)malloc(sizeof(TreeNode));
    37. struct TreeNode *pD = (struct TreeNode *)malloc(sizeof(TreeNode));
    38. struct TreeNode *pE = (struct TreeNode *)malloc(sizeof(TreeNode));
    39. pA->Data = 5;
    40. pB->Data = 6;
    41. pC->Data = 7;
    42. pD->Data = 8;
    43. pE->Data = 9;
    44. pA->Left = pB;
    45. pA->Right = pC;
    46. pB->Left = NULL;
    47. pB->Right = NULL;
    48. pC->Left = pD;
    49. pC->Right = NULL;
    50. pD->Left = NULL;
    51. pD->Right = pE;
    52. pE->Left = NULL;
    53. pE->Right = NULL;
    54. return pA;
    55. }
    56. Queue CreatQueue()
    57. {
    58. Queue Q;
    59. Q = (Queue)malloc(sizeof(struct QNode));
    60. Q->rear = -1;
    61. Q->front = -1;
    62. return Q;
    63. }
    64. void AddQ(Queue Q, struct TreeNode * X)
    65. {
    66. if(IsFull(Q))
    67. {
    68. printf("已满");
    69. return ;
    70. }
    71. else
    72. {
    73. Q->rear = ((Q->rear) + 1) % MaxSize;
    74. Q->Data[Q->rear] = X;
    75. }
    76. }
    77. bool IsFull(Queue Q)
    78. {
    79. return (((Q->rear) + 1) % MaxSize ) == Q->front;
    80. }
    81. bool IsEmpty(Queue Q)
    82. {
    83. return (Q->front == Q->rear);
    84. }
    85. struct TreeNode * Delete(Queue Q)
    86. {
    87. if(IsEmpty(Q))
    88. {
    89. printf("队空");
    90. return NULL;
    91. }
    92. else
    93. {
    94. Q->front = (Q->front + 1) % MaxSize;
    95. return Q->Data[Q->front];
    96. }
    97. }
    98. void LevelorderTraversal ( struct TreeNode * BT )
    99. {
    100. Queue Q;
    101. struct TreeNode * T;
    102. if ( !BT )
    103. return;
    104. Q = CreatQueue();
    105. AddQ( Q, BT );
    106. while ( !IsEmpty(Q) ) {
    107. T = Delete( Q );
    108. printf("%d\n", T->Data);
    109. if ( T->Left ) AddQ( Q, T->Left );
    110. if ( T->Right ) AddQ( Q, T->Right );
    111. }
    112. }