华为 · 广度优先搜索(BFS) · 算法编程题
华为 广度优先搜索(BFS) n ≤ 10 时限 2 秒 / 256 MB

题目描述

小红正在整理一套目录系统。每个目录自身有一个文件大小,并且最多有两个子目录。目录结构用层序遍历数组表示,其中 -1 表示该位置为空目录。
小红希望统计每个非空目录的总大小:一个目录的总大小等于它自身文件大小,加上所有子目录的总大小。空目录仍然用 -1 表示。
给定目录层数 n 和层序数组,请输出统计后的层序数组。最后一层末尾多余的空节点不需要补齐,输出时也不要在行末添加多余空格。

输入输出

输入描述
输入包含两行:
第一行为目录的层数 n ,取值范围: 1<=n<=10
第二行为一个基于二叉树层序遍历给出的第 0-(n-1) 层各目录文件的大小一维数组,数组的每个元素 m [i] 为整型,且 -1<=m[i]<=10 。
- -1 表示该节点为空
- 0 表示该节点无文件但可能有子目录
输入示例:
```
3
1 2 -1 5 3
```
![](file://FLbWcTxoYh5uxBJHBdeV5.png)
输出描述
基于二叉树层序遍历的统计后的每个目录总大小,如果节点为空则用 - 1 表示。第 n-1 层最后一个节点后的空节点应省略,不用输出。输出结果不能以空格结束。
```
11 10 -1 5 3
```
![](file://1A8vyFaY36J0noMCHJKgI.png)
计算逻辑说明:
- 节点 5 和节点 3 :因为为无子节点,计算后的大小即为自己的大小;
- 节点 2 :存在两个子节点 5 和 3 ,计算后的大小为自己大小 + 子节点大小,即 2+5+3=10 ;
- 节点 1 :存在一个子节点 2 ,先由子节点计算新大小,再计算新节点 1 的大小,即 1+10=11 。

样例共 1 组

样例 1
输入
3
1 2 -1 5 3
输出
11 10 -1 5 3

算法解析依据一般

考点:广度优先搜索(BFS)

数据规模 n ≤ 10 | 限制 2 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 10
  • 元素值域:m[i] ≤ 10(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 源站时限:2 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:广度优先搜索(BFS)

按层扩散搜索,无权图上第一次到达即最短路。

思路框架(广度优先搜索(BFS) 通法 · 非本题专属)

  1. 起点入队并标记已访问。
  2. 每次取队首,把它的所有未访问邻居入队并记录步数。
  3. 第一次访问到目标时,步数即为最少步数。
  4. 网格类题目通常有 4(或 8)个方向,用方向数组统一处理。

实现要点:标记访问必须在入队时做,不能在出队时做,否则会重复入队甚至超时。

复杂度:时间 O(V+E) | 空间 O(V)

该范式的通法易错点

  • 出队才标记访问导致 MLE/TLE。
  • 网格边界没判,越界访问。

对照本题

  • 数据规模 n ≤ 10,允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 元素值域最大到 10 —— 求和 / 相乘时记得开 64 位整数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

  • 输入:3 / 1 2 -1 5 3
  • 输出:11 10 -1 5 3

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年-华为-04月29号开发岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解