二叉树遍历


 1 //第一步:头文件
 2 //第二步:宏定义,结构体定义,重命名
 3 //第三步:情况 1:声明小函数,函数的具体实现放在 main 函数之后
 4 //情况 2:定义并实现小函数的具体代码,所有的函数实现都在 main 函数之前
 5 //第四步:实现 main 函数
 6 #include
 7 #include
 8 typedef char ElementType;
 9 typedef struct TNode * Position;
10 typedef Position BinTree; /* 二叉树类型 */
11 struct TNode{ /* 树结点定义 */
12 ElementType Data; /* 结点数据 */
13 struct TNode * Left; /* 指向左子树 */
14 BinTree Right; /* 指向右子树 */
15 };
16  
17 /* 中序遍历 */
18 void MiddleTraversal( BinTree BT )
19 {
20 if( BT ) {
21 MiddleTraversal( BT->Left );
22 /* 此处假设对 BT 结点的访问就是打印数据 */
23 printf("%c ", BT->Data); /* 假设数据为整型 */
24 MiddleTraversal( BT->Right );
25 } 
26 }
27  
28 /* 先序遍历 */
29 void PreviousTraversal( BinTree BT )
30 {
31 if( BT ) {
32 printf("%c ", BT->Data );
33 PreviousTraversal( BT->Left );
34 PreviousTraversal( BT->Right );
35 } 
36 }
37  
38 /* 后序遍历 */
39 void BehindTraversal( BinTree BT )
40 {
41 if( BT ) {
42 BehindTraversal( BT->Left );
43 BehindTraversal( BT->Right );
44 printf("%c ", BT->Data);
45 } 
46 }
47  
48 BinTree CreateBTree() {
49     //自己构建二叉树
50     //1:用 malloc 分配空间大小
51         BinTree PA = (struct TNode*)malloc(sizeof(struct TNode));
52         BinTree PB = (Position)malloc(sizeof(struct TNode));
53         BinTree PC = (BinTree)malloc(sizeof(struct TNode));
54         BinTree PD = (struct TNode*)malloc(sizeof(struct TNode));
55         BinTree PE = (Position)malloc(sizeof(struct TNode));
56         BinTree PF = (BinTree)malloc(sizeof(struct TNode));
57         //2:每个结点数据域赋值
58         PA->Data = 'A';
59         PB->Data = 'B';
60         PC->Data = 'C';
61         PD->Data = 'D';
62         PE->Data = 'E';
63         PF->Data = 'F';
64         //3:每个结点指针域赋值
65         PA->Left = PB;
66         PA->Right = PC;
67         PB->Left = PD;
68         PB->Right = NULL;
69         PC->Left = PE;
70         PC->Right = PF;
71         PD->Left = PD->Right = NULL;
72         PE->Left = PE->Right = NULL;
73         PF->Left = PF->Right = NULL;
74         //4:返回根节点
75         return PA;
76 }
77  
78 int main(){
79 BinTree pT=CreateBTree();
80 printf("前序遍历:");
81 PreviousTraversal(pT); 
82 printf("\n");
83 printf("中序遍历:"); 
84 MiddleTraversal(pT);
85 printf("\n");
86 printf("后序遍历:"); 
87 BehindTraversal(pT);
88 printf("\n");
89 return 0;
90 }