1 #include<stdio.h>
2 #include<stdlib.h>
3
4 #define MAXTSIZE 100; //二叉树的最大结点数
5 typedef char TElemType;
6
7 typedef struct BiTNode
8 {
9 TElemType data; //结点数据域
10 struct BiTNode* lchild;
11 struct BiTNode* rchild; //结点的指针域
12 }BiTNode, * BiTree;
13
14 //前序遍历建立二叉树
15 void PreOrderCreatBiTree(BiTree* T)
16 {
17 char ch;
18 scanf("%c", &ch);
19 if (ch == ' ')
20 {
21 *T = NULL;
22 }
23 else
24 {
25 *T = (BiTNode*)malloc(sizeof(BiTNode));
26 (*T)->data = ch;
27 PreOrderCreatBiTree(&(*T)->lchild);
28 PreOrderCreatBiTree(&(*T)->rchild);
29 }
30 }
31
32 //前序遍历打印二叉树
33 void PreOrderTarverse(BiTree T)
34 {
35 if (T)
36 {
37 printf("%c", T->data);
38 PreOrderTarverse(T->lchild);
39 PreOrderTarverse(T->rchild);
40 }
41 }
42 //中序遍历打印二叉树
43 void InOrderTarverse(BiTree T)
44 {
45 if (T)
46 {
47 InOrderTarverse(T->lchild);
48 printf("%c", T->data);
49 InOrderTarverse(T->rchild);
50 }
51 }
52 //后序遍历打印二叉树
53 void PostOrderTraverse(BiTree T)
54 {
55 if (T)
56 {
57 PostOrderTraverse(T->lchild);
58 PostOrderTraverse(T->rchild);
59 printf("%c", T->data);
60 }
61 }
62 //复制一颗二叉树
63 void Copy(BiTree T, BiTree *NewT)
64 {
65 if (T == NULL)
66 {
67 *NewT = NULL;
68 return;
69 }
70 else
71 {
72 *NewT = (BiTNode *)malloc(sizeof(BiTNode));
73 (*NewT)->data = T->data;
74 Copy(T->lchild, &(*NewT)->lchild);
75
76 Copy(T->rchild, &(*NewT)->rchild);
77 }
78 }
79 //求深度
80 int Depth(BiTree T)
81 {
82 int m = 0;
83 int n = 0;
84
85 if (T == NULL)
86 return 0;
87 else
88 {
89 m = Depth(T->lchild);
90 n = Depth(T->rchild);
91 }
92 if (m > n)
93 return (m + 1);
94 else
95 return (n + 1);
96 }
97 //统计结点个数
98 int NodeCount(BiTree T)
99 {
100 if (T == NULL)
101 {
102 return 0;
103 }
104 else
105 {
106 return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
107 }
108 }
109
110 int main(void)
111 {
112 BiTree T = NULL;
113 BiTree NewT = NULL;
114 int depth;
115 int NodeNum;
116 //BiTree pNewT;
117
118 printf("前序遍历创建二叉树,' '表示空:\n");
119 PreOrderCreatBiTree(&T);
120 printf("下面前序遍历打印二叉树:\n");
121 PreOrderTarverse(T);
122 printf("\n");
123 printf("下面中序遍历打印二叉树:\n");
124 InOrderTarverse(T);
125 printf("\n");
126 printf("下面后序遍历打印二叉树:\n");
127 PostOrderTraverse(T);
128 printf("\n");
129 printf("开始复制二叉数并前序遍历打印:\n");
130 Copy(T, &NewT);
131 PreOrderTarverse(NewT);
132 printf("\n下面计算二叉树的深度:\n");
133 depth = Depth(T);
134 printf("二叉树的深度为:%d", depth);
135 printf("\n下面统计二叉树中结点的个数:\n");
136 NodeNum = NodeCount(T);
137 printf("结点总结点个数为:%d", NodeNum);
138 return 0;
139 }