标签:打印二叉树 表示 struct 数据 oid 后序 count return 复制
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 }
标签:打印二叉树 表示 struct 数据 oid 后序 count return 复制
原文地址:https://www.cnblogs.com/ZhengLijie/p/12600348.html