本文编译环境:Dev c++ 5.4.0
语言:c
序言:二叉树简单来说就是数据加上两个指针域指向两个子结点,难在遍历上的一些操作,这里讲下,建立,凹入显示,求深度和宽度的操作。
#include <stdio.h> #include <stdlib.h> typedef struct BT//建立结构体 { char data;//数据 BT *right;//右节点 BT *left;//坐节点 }BT; BT *Greatetree()//建立二叉树 { BT *t; char c; scanf("%c",&c); getchar();//吸收换行符号 if(c=='0') t=NULL;//判断结束 else { t=(BT *)malloc(sizeof(BT)); t->data=c; printf("请输入%c的左子结点\n",t->data); t->left=Greatetree(); printf("请输入%c的右子结点\n",t->data); t->right=Greatetree(); } return t; } void Showtree(int level,int n,BT *t)// 凹入显示 { int i; if(t!=NULL) { for(i=0;i<4*level;i++) printf(" "); printf("%c (-)",t->data,n); for(i=20-4*level;i>0;i--) printf("-"); printf("\n"); Showtree(level+1,-1,t->left); Showtree(level+1,1,t->right); } } int Numlenth(BT *t) { if(t!=NULL) { return (1+Numlenth(t->right))>(1+Numlenth(t->left))?(1+Numlenth(t->right)):(1+Numlenth(t->left)); }//返回深度高的 } int Weith(int n[],BT *t,int i) { if(t!=NULL) { n[i]++; Weith(n,t->right,i+1); Weith(n,t->left,i+1); } } int Numweith(BT *t,int L)//查看宽度 { int n[L],max=0,i;//数组用来存储每层深度的宽度 for(i=0;i<L;i++) { n[i]=0;//初始化 } Weith(n,t,0); //求值 for(i=0;i<L;i++) { if(n[i]>max) max=n[i];//求最大值 } printf("宽度为%d\n",max); } int main() { BT *T; //初始化 printf("请输入根结点\n"); T=Greatetree();//创建 Showtree(1,0,T);//查看 int L=Numlenth(T);//求深度 printf("%深度为%d\n",L); Numweith(T,L);//求宽度 return 0; }结果
这些代码都是跑过的,建议大家还是自己亲手敲一遍加深印象,作者这里也是一字一字敲出来的,要避免眼高手低。
本章的内容有误或者不懂的地方,大家可以私信我,我也会第一时间回复大家的,差不多暑假两个月,复习下这些基本知识,其他的问题也可以问我,就算我不知道的,在能力范围之内的一定竭尽全力为你们解答。我的QQ:932824098.
