二叉树的基本操作

  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 }

 

posted @ 2020-03-30 18:36  Xxaj5  阅读(143)  评论(0编辑  收藏  举报