树和二叉树的操作

基础:结构体,指针,二叉树。

本文编译环境: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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值