#include <stdio.h>
#include <stdlib.h>
enum TRAVERSAL_TYPE
{
PREORDER_TRAVERSAL, // 先序遍历
IN_ORDER_TRAVERSAL, // 中序遍历
POST_ORDER_TRAVERSAL, // 后续遍历
};
// 二叉树结点
typedef struct BINARYTREENODE
{
char ch;
struct BINARYTREENODE* lChild;
struct BINARYTREENODE* rChild;
};
void Recursion(struct BINARYTREENODE* root, const int& traverType = PREORDER_TRAVERSAL)
{
if (root == NULL)
{
return;
}
// 前、中、后序遍历无外乎根节点的访问差别,左右子树访问顺序相对不变
switch (traverType)
{
case PREORDER_TRAVERSAL:
{
printf("%c ", root->ch);
Recursion(root->lChild, traverType);
Recursion(root->rChild, traverType);
}
break;
case IN_ORDER_TRAVERSAL:
{
Recursion(root->lChild, traverType);
printf("%c ", root->ch);
Recursion(root->rChild, traverType);
}
break;
case POST_ORDER_TRAVERSAL:
{
Recursion(root->lChild, traverType);
Recursion(root->rChild, traverType);
printf("%c ", root->ch);
}
break;
default:
printf("未定义的遍历类型!\n");
break;
}
}
void CreateTest()
{
// 创建结点
struct BINARYTREENODE node1 = { 'A', NULL, NULL };
struct BINARYTREENODE node2 = { 'B', NULL, NULL };
struct BINARYTREENODE node3 = { 'C', NULL, NULL };
struct BINARYTREENODE node4 = { 'D', NULL, NULL };
struct BINARYTREENODE node5 = { 'E', NULL, NULL };
struct BINARYTREENODE node6 = { 'F', NULL, NULL };
struct BINARYTREENODE node7 = { 'G', NULL, NULL };
// 建立结点关系
node1.lChild = &node2;
node1.rChild = &node3;
node2.lChild = &node4;
node2.rChild = &node5;
node3.lChild = &node6;
node3.rChild = &node7;
printf("\n先序遍历序列:\n");
Recursion(&node1);
printf("\n中序遍历序列:\n");
Recursion(&node1, IN_ORDER_TRAVERSAL);
printf("\n后序遍历序列:\n");
Recursion(&node1, POST_ORDER_TRAVERSAL);
}
int main()
{
CreateTest();
system("pause");
return 0;
}
程序 运行截图: