//第一步:头文件
//第二步:宏定义,结构体定义,重命名
//第三步:情况 1:声明小函数,函数的具体实现放在 main 函数之后
//情况 2:定义并实现小函数的具体代码,所有的函数实现都在 main 函数之前
//第四步:实现 main 函数
#include<stdio.h>
#include<stdlib.h>
typedef char ElementType;
typedef struct TNode * Position;
typedef Position BinTree; /* 二叉树类型 */
struct TNode{ /* 树结点定义 */
ElementType Data; /* 结点数据 */
struct TNode * Left; /* 指向左子树 */
BinTree Right; /* 指向右子树 */
};
/* 中序遍历 */
void MiddleTraversal( BinTree BT )
{
if( BT ) {
MiddleTraversal( BT->Left );
/* 此处假设对 BT 结点的访问就是打印数据 */
printf("%c ", BT->Data); /* 假设数据为整型 */
MiddleTraversal( BT->Right );
}
}
/* 先序遍历 */
void PreviousTraversal( BinTree BT )
{
if( BT ) {
printf("%c ", BT->Data );
PreviousTraversal( BT->Left );
PreviousTraversal( BT->Right );
}
}
/* 后序遍历 */
void BehindTraversal( BinTree BT )
{
if( BT ) {
BehindTraversal( BT->Left );
BehindTraversal( BT->Right );
printf("%c ", BT->Data);
}
}
BinTree CreateBTree() {
//自己构建二叉树
//1:用 malloc 分配空间大小
BinTree PA = (struct TNode*)malloc(sizeof(struct TNode));
BinTree PB = (Position)malloc(sizeof(struct TNode));
BinTree PC = (BinTree)malloc(sizeof(struct TNode));
BinTree PD = (struct TNode*)malloc(sizeof(struct TNode));
BinTree PE = (Position)malloc(sizeof(struct TNode));
BinTree PF = (BinTree)malloc(sizeof(struct TNode));
//2:每个结点数据域赋值
PA->Data = 'A';
PB->Data = 'B';
PC->Data = 'C';
PD->Data = 'D';
PE->Data = 'E';
PF->Data = 'F';
//3:每个结点指针域赋值
PA->Left = PB;
PA->Right = PC;
PB->Left = PD;
PB->Right = NULL;
PC->Left = PE;
PC->Right = PF;
PD->Left = PD->Right = NULL;
PE->Left = PE->Right = NULL;
PF->Left = PF->Right = NULL;
//4:返回根节点
return PA;
}
int main(){
BinTree pT=CreateBTree();
printf("前序遍历:");
PreviousTraversal(pT);
printf("\n");
printf("中序遍历:");
MiddleTraversal(pT);
printf("\n");
printf("后序遍历:");
BehindTraversal(pT);
printf("\n");
return 0;
}