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表示没有叶结点: "); 109 CreateBiTree(&T); 110 printf("先序遍历二叉树: "); 111 TraverseBiTree(T); 112 printf(" "); 113 printf("中序遍历二叉树: "); 114 InOrderBiTree(T); 115 printf(" "); 116 printf("后序遍历二叉树: "); 117 PostOrderBiTree(T); 118 printf(" "); 119 deepth=TreeDeep(T); 120 printf("树的深度为:%d",deepth); 121 printf(" "); 122 Leafcount(T,num); 123 printf("树的叶子结点个数为:%d",num); 124 printf(" "); 125 return 0; 126 }