AVRIL_START_JANCOKALIVEAVRIL_END_JANCOK Interactive Terminal

Command Executor

**获取二叉树第k层的数值** - 魔改工程师

**获取二叉树第k层的数值**

2026 华为OD机试真题 8月12日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

给定一棵有根二叉树,请找出第 k 层上的所有节点值,去重后按升序输出。

这里默认根节点编号为 ,输入的边信息表示父子关系 [father, child]

2026 华为OD机试真题 8月12日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

输入描述

输入为四行:

n
vals
edges
k
  • n:节点数,节点编号为 0 ~ n-1
  • vals:长度为 n 的数组,vals[i] 表示编号为 i 的节点值
  • edges:二维数组,每个元素为 [father, child],表示有向边
  • k:层数,根节点所在层为

其中 vals 使用英文逗号分隔,edges 使用 JSON-like 二维数组格式。

输出描述

输出第 k 层所有节点值去重后的升序数组,格式为:

[v1,v2,v3]

若第 k 层不存在节点,则输出 []

示例1

输入

5
5,3,8,3,7
[[0,1],[0,2],[1,3],[1,4]]
2

输出

[3,7]

示例2

输入

7
10,5,8,1,6,7,9
[[0,1],[0,2],[1,3],[1,4],[2,5],[2,6]]
1

输出

[5,8]

示例3

输入

1
42
[]
0

输出

[42]

解题思路

核心思想

树的层级可以通过 BFS 一层层遍历得到。因为题目要求第 k 层节点值去重后排序,所以只要先找出第 k 层所有节点,再去重并升序输出即可。

算法步骤

  1. 读取节点数、节点值数组、边数组和层数 k
  2. 根据父子边构建邻接表。
  3. 从根节点 开始做 BFS,逐层扩展。
  4. 当遍历到第 k 层时,收集该层所有节点值。
  5. 对收集到的值去重并排序,按数组格式输出。

复杂度分析

设节点数为 n

  • 时间复杂度:O(n log n),BFS 为 O(n),排序去重后最坏为 O(n log n)
  • 空间复杂度:`O(
THE END