基础:结构体,指针,二叉树。
本文编译环境: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 (%2d)",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.