03-树2 List Leaves (25 分)

本文介绍了一种方法,首先找到树的根节点,然后通过层序遍历来处理,尤其关注如何输出叶节点的坐标,同时强调了输出格式的要求。
摘要由CSDN通过智能技术生成

大致思路:先找到根结点root(没有任何结点指向它的结点),并且记录叶子的个数,然后运用层序遍历(根据题目要求选的),将叶结点的坐标输出,注意输出格式。

#include<cstdio>
#include<queue>
using namespace std;
const int maxn=20;
struct TNode{
	int left, right;
}T[maxn];
int count=0;
void print(int root){
	if(root==-1)return;
	queue<int> q;
	q.push(root);
	while(!q.empty()){
		root=q.front();
		q.pop();
		if(T[root].left==-1 && T[root].right==-1){
			printf("%d", root);
			count--;
			if(count!=0)printf(" ");
		}
		if(T[root].left!=-1)q.push(T[root].left);
		if(T[root].right!=-1)q.push(T[root].right);
	}
}
int check[maxn];
int main(){
	int n, root=-1;
	char lc, lr;
	scanf("%d\n", &n);
	for(int i=0; i<n; i++)check[i]=0;
	for(int i=0; i<n; i++){
		scanf("%c %c\n", &lc, &lr);
		if(lc=='-'&&lr=='-')count++;
		if(lc!='-'){
			T[i].left=lc-'0';
			check[T[i].left]=1;
		}else{
			T[i].left=-1;
		}
		if(lr!='-'){
			T[i].right=lr-'0';
			check[T[i].right]=1;
		}else{
			T[i].right=-1;
		}
	}
	for(int i=0; i<n; i++){
		if(check[i]==0){
			root=i;
			break;
		}
	}
	print(root);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值