1004. Counting Leaves

本文介绍了一个使用C++实现的程序,该程序通过读取输入文件来构建一个树状结构,并统计每一层的叶节点数量。文章详细展示了如何初始化节点、建立父子节点关系以及遍历树结构的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<queue>
#define MAX 100
using namespace std;
struct node {
	int key;
	int level;
	node(int _key = 0, int _level = 1) :key(_key), level(_level) {}
};
int main() {
	freopen("D://input.txt", "r", stdin);
	int nodeNumber, nodeNonleaf, childNumber, i, j, root, sumCount, child, level[MAX], Node[MAX];
	//Node 数组存储第i个节点的层级		level存储第i层上有多少个叶节点
	int temp, maxLevel;

	cin >> nodeNumber >> nodeNonleaf;

	vector<vector<int> >parent;
	queue<int> Queue;

	parent.resize(nodeNumber + 1);

	for (i = 0; i < MAX; i++) {	//denode nonleaf node on each level
		level[i] = 0;
		Node[i] = 0;
	}

	for (i = 0; i < nodeNonleaf; i++) {

		cin >> root >> sumCount;
		for (j = 0; j < sumCount; j++) {
			cin >> child;
			parent[root].push_back(child);
		}
	}

	root = 1, maxLevel = 0;
	Queue.push(root);

	while (!Queue.empty()) {
		temp = Queue.front();
		
		if (maxLevel < Node[temp])
			maxLevel = Node[temp];

		if (parent[temp].size() == 0) {
			level[Node[temp]]++;
		}
		else {
			for (i = 0; i < parent[temp].size(); i++) {
				Queue.push(parent[temp][i]);
				Node[parent[temp][i]] = Node[temp] + 1;
			}
		}
		Queue.pop();
	}
	cout << level[0];
	for (i = 1; i <= maxLevel; i++)
		cout << " " << level[i];
	cout << endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值