寒假作业2024.2.7

1请编程实现二又树的操作
1.1二又树的创建
1.2二又树的先序遍历
1.3二又树的中序遍历
1.4二又树的后序遍历
1.5二又树各个节点度的个数
1.6二叉树的深度

#include 
#include 
#include 
#include 
#include 
typedef char datatype;

typedef struct Node
{
	datatype data;//数据域
	struct Node *l;//左孩子
	struct Node *r;//右孩子
}*Btree;
//创建节点
Btree create()
{
	Btree s=(Btree)malloc(sizeof(struct Node));
	if(s==NULL)
	return NULL;
	s->data='\0';
	s->l=NULL;
	s->r=NULL;
	return s;
}
//创建树和插入数据
Btree create_tree()
{
	datatype element;
	printf("please enter element:");
	scanf(" %c",&element);
	if(element=='#')
	{
		return NULL;
	}
	//创建根结点
	Btree tree=create();
	tree->data=element;
	//创建左孩子
	puts("左");
	tree->l=create_tree();
	//创建右孩子
	puts("右");
	tree->r=create_tree();
	//返回主函数
	return tree;
}
//先序遍历输出
void firstoutput(Btree tree)
{
	if(tree==NULL)
		return;
	//输出根
	printf("%c",tree->data);
	//遍历输出左孩子
	firstoutput(tree->l);
	//遍历输出右孩子
	firstoutput(tree->r);
}
//中序遍历输出
void midoutput(Btree tree)
{
	if(tree==NULL)
		return;
	//遍历输出左孩子
	firstoutput(tree->l);
	//输出根
	printf("%c",tree->data);
	//遍历输出右孩子
	firstoutput(tree->r);
}
//后序遍历输出
void lastoutput(Btree tree)
{
	if(tree==NULL)
		return ;
	//遍历输出左孩子
	firstoutput(tree->l);
	//遍历输出右孩子
	firstoutput(tree->r);
	//输出根
	printf("%c",tree->data);
}
//二叉树的各个度的节点个数
void count(Btree tree,int *n0,int *n1,int *n2)
{
	if(tree==NULL)
	return ;
	
	if(!tree->l && !tree->r)
		++*n0;
	else if(tree->l && tree->r)
		++*n2;
	else
		++*n1;
	//遍历左孩子
	count(tree->l,n0,n1,n2);
	//遍历右孩子
	count(tree->r,n0,n1,n2);
}
//计算树深度
int high(Btree tree)
{
	if(tree==NULL)
		return 0;
	//计算左深度
	int left=1+high(tree->l);
	//计算右深度
	int right=1+high(tree->r);
	if(left>right)
		return left;
	else
		return right;
}

int main(int argc, const char *argv[])
{
	//创建二叉树
	Btree tree=create_tree();
	//先序遍历
	printf("先序遍历\n");
	firstoutput(tree);
	puts("");
	//中序遍历输出
	printf("中序遍历\n");
	midoutput(tree);
	puts("");
	//后序遍历输出
	printf("后序遍历\n");
	lastoutput(tree);
	puts("");
	//二插树各个度的结点个数
	int n0=0,n1=0,n2=0;
	count(tree,&n0,&n1,&n2);
	printf("n0=%d n1=%d n2=%d sum=%d\n",n0,n1,n2,n0+n1+n2);
	//计算树的深度
	int len=high(tree);
	printf("二叉树深度为%d\n",len);
	return 0;
}

现象展示: 

寒假作业2024.2.7_第1张图片

你可能感兴趣的:(数据结构)