博客
关于我
1004 Counting Leaves (30分)
阅读量:379 次
发布时间:2019-03-05

本文共 1795 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要计算每一层的无子节点数量,包括根节点。我们将使用广度优先搜索(BFS)来逐层遍历树,并统计每一层的无子节点数量。

方法思路

  • 输入处理:读取输入数据,构建树的结构,记录每个节点的子节点。
  • 广度优先搜索(BFS):从根节点开始,逐层访问每个节点,统计每一层的无子节点数量。
  • 层序遍历:对于每个节点,检查其是否为叶子节点。如果是,则计入当前层的无子节点数量;否则,将其子节点加入队列,继续处理下一层。
  • 解决代码

    #include 
    #include
    #include
    #include
    #include
    using namespace std;
    int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    unordered_map
    > tree; for (int i = 0; i < m; ++i) { string line; // 读取一整行,去掉可能的换行符 while (getline(line, cin) && line.empty()) continue; // 分割成各个部分 vector
    parts; size_t start = 0; size_t end = line.find(' '); while (end != string::npos) { parts.push_back(line.substr(start, end - start)); start = end + 1; end = line.find(' ', start); } parts.push_back(line.substr(start)); // 解析t int t; sscanf(parts[0].c_str(), "%d", &t); int k = stoi(parts[1]); vector
    children; for (size_t j = 2; j < parts.size(); ++j) { int child; sscanf(parts[j].c_str(), "%d", &child); children.push_back(child); } tree[t] = children; } // 处理BFS queue
    q; q.push(1); // 根节点是01,对应整数1. vector
    res; while (!q.empty()) { int level_size = q.size(); int count = 0; for (int i = 0; i < level_size; ++i) { int node = q.front(); q.pop(); bool is_leaf = true; if (tree.find(node) != tree.end()) { if (tree[node].size() == 0) { is_leaf = true; } else { is_leaf = false; } } else { is_leaf = true; } if (is_leaf) { count++; } else { for (int child : tree[node]) { q.push(child); } } } res.push_back(count); } // 输出结果 if (!res.empty()) { for (size_t i = 0; i < res.size(); ++i) { if (i > 0) { cout << " "; } cout << res[i]; } } return 0; }

    代码解释

  • 输入处理:读取输入数据,解析每个非叶子节点的信息,构建树的结构。
  • BFS初始化:从根节点开始,使用队列进行层序遍历。
  • 层序遍历:逐层处理每个节点,判断其是否为叶子节点,统计无子节点数量。
  • 结果输出:将每一层的无子节点数量输出,层与层之间用空格分隔。
  • 通过这种方法,我们能够高效地计算每一层的无子节点数量,并处理所有测试用例。

    转载地址:http://jzbwz.baihongyu.com/

    你可能感兴趣的文章
    OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式&授权码模式
    查看>>
    OAuth2 Provider 项目常见问题解决方案
    查看>>
    OAuth2 vs JWT,到底怎么选?
    查看>>
    Vue.js 学习总结(14)—— Vue3 为什么推荐使用 ref 而不是 reactive
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>
    OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
    查看>>
    OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
    查看>>
    OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    OAuth2.0_授权服务配置_三项内容_Spring Security OAuth2.0认证授权---springcloud工作笔记141
    查看>>
    OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
    查看>>
    OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
    查看>>
    OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
    查看>>
    OAuth2.0_授权服务配置_授权码模式_Spring Security OAuth2.0认证授权---springcloud工作笔记144
    查看>>
    OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
    查看>>
    OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
    查看>>
    OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
    查看>>
    oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
    查看>>
    OAuth2.0四种模式的详解
    查看>>