7-1 树! (30分)

在这里插入图片描述在这里插入图片描述
分析:
首先题目要求“层序遍历输出”一棵树所有叶子节点编号,再看题目的输入要求,是输入其自身序号以及对应的左右子树序号,而序号是从1到N按顺序下来的,而不是按某种遍历输入,因此建树再层序输出的方法比较麻烦。
思路:可以定义一个结构,里面有树的深度,自身序号,左结点和右结点的序号。然后定义一个此结构类型的的队列。开始时,把1号序列树入队,再设置循环至队列为空时停止,循环中依次弹出,如果弹出的结点,它的左右节点都为0,那么就输出它的序号以及深度;如果左结点不为空就把左结点的深度+1,再把左结点入队;如果右结点不为空就把右结点的深度+1,再把右结点入队。

#include<stdio.h>
struct Node{
	int e,r,l,d; //e为自身结点序号,r为右结点序号,l为左结点序号,d为自身结点深度
};
void Operate(struct Node* T)
{
	int front=0,rear=0;//front为出队标志,rear为入队标志
	struct Node a[600],t;//队列类型为结构类型
	a[++rear]=T[1];
	while(front!=rear){//front和rear相等时,表示队列为空
		t=a[++front];
		if(!t.l&&!t.r) printf("%d %d\n",t.e,t.d);
		else{
			T[t.l].d=T[t.r].d=t.d+1;//深度+1
			if(t.l) a[++rear]=T[t.l];//左不空,入队列
			if(t.r) a[++rear]=T[t.r];//右不空,入队列
		}
	}
}
int main ()
{
	int n,i;
	scanf("%d",&n);
	struct Node T[n+1];
	for(i=1;i<=n;i++){
		scanf("%d %d %d",&T[i].e,&T[i].l,&T[i].r);
		T[i].d=0;
	}
	Operate(T);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值