1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <malloc.h>
4 typedef int ElemType; //数据类型
5
6 //定义二叉树结构,与单链表相似,多了一个右孩子结点
7 typedef struct BiTNode
8 {
9 ElemType data; //数据域
10 struct BiTNode
11 *lChild, *rChlid; //左右子树域
12 } BiTNode, *BiTree;
13
14 //先序创建二叉树
15 int CreateBiTree(BiTree *T)
16 {
17 ElemType ch;
18 ElemType temp;
19 scanf("%d", &ch);
20 temp = getchar();
21 if (ch == -1)
22 *T = NULL;
23 else
24 {
25 *T = (BiTree)malloc(sizeof(BiTNode));
26 if (!(*T))
27 exit(-1);
28 (*T)->data = ch;
29 printf("输入%d的左子节点:", ch);
30 CreateBiTree(&(*T)->lChild);
31 printf("输入%d的右子节点:", ch);
32 CreateBiTree(&(*T)->rChlid);
33 }
34 return 1;
35 }
36
37 //先序遍历二叉树
38 void TraverseBiTree(BiTree T)
39 {
40 if (T == NULL)
41 return ;
42 printf("%d ", T->data);
43 TraverseBiTree(T->lChild);
44 TraverseBiTree(T->rChlid);
45
46
47 }
48
49 //中序遍历二叉树
50 void InOrderBiTree(BiTree T)
51 {
52 if (T == NULL)
53 return ;
54 InOrderBiTree(T->lChild);
55 printf("%d ", T->data);
56 InOrderBiTree(T->rChlid);
57
58
59 }
60
61
62 //后序遍历二叉树
63 void PostOrderBiTree(BiTree T)
64 {
65 if (T == NULL)
66 return ;
67 PostOrderBiTree(T->lChild);
68 PostOrderBiTree(T->rChlid);
69 printf("%d ", T->data);
70 }
71
72 //二叉树的深度
73
74 int TreeDeep(BiTree T)
75 {
76 int deep = 0;
77 if(T)
78 {
79 int leftdeep = TreeDeep(T->lChild);
80 int rightdeep = TreeDeep(T->rChlid);
81 deep = leftdeep>=rightdeep?leftdeep+1:rightdeep+1;
82 }
83 return deep;
84 }
85
86 //求二叉树叶子结点个数
87
88 int Leafcount(BiTree T,int &num)
89 {
90 if(T)
91 {
92 if(T->lChild ==NULL &&T->rChlid==NULL)
93
94 num++;
95 Leafcount(T->lChild,num);
96 Leafcount(T->rChlid,num);
97
98
99 }
100 return num;
101 }
102 //主函数
103 int main(void)
104 {
105 BiTree T;
106 BiTree *p = (BiTree*)malloc(sizeof(BiTree));
107 int deepth,num=0 ;
108 printf("请输入第一个结点的值,-1表示没有叶结点:\n");
109 CreateBiTree(&T);
110 printf("先序遍历二叉树:\n");
111 TraverseBiTree(T);
112 printf("\n");
113 printf("中序遍历二叉树:\n");
114 InOrderBiTree(T);
115 printf("\n");
116 printf("后序遍历二叉树:\n");
117 PostOrderBiTree(T);
118 printf("\n");
119 deepth=TreeDeep(T);
120 printf("树的深度为:%d",deepth);
121 printf("\n");
122 Leafcount(T,num);
123 printf("树的叶子结点个数为:%d",num);
124 printf("\n");
125 return 0;
126 }