You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用单队列实现二叉树层序遍历:为何需要临时ArrayList?

为什么层序遍历需要临时集合level?

这个临时的ArrayList<level>核心作用是按层级分组存储节点值,保证最终输出符合层序遍历的定义——每一层的节点值单独构成一个子列表,而不是把所有节点值平铺成一个一维列表。

举个直观的例子,假设我们有这样一棵二叉树:

1
   / \
  2   3
 /
4
  • 如果直接把head.val添加到result中,最终result会是:[1,2,3,4],这只是普通的广度优先遍历结果,完全丢失了「哪些节点属于同一层」的信息。
  • 而用level临时集合的话,最终result会是:[[1],[2,3],[4]],清晰地体现了层级结构:第一层只有节点1,第二层是节点2和3,第三层是节点4。

再结合代码逻辑来看:

  1. 外层while循环的每一轮,对应处理二叉树的一层节点
  2. 每次进入while循环时,queue.size()得到的就是当前层的节点总数
  3. 内层for循环会遍历当前层的所有节点,把它们的值全部存入level集合
  4. 当当前层的所有节点处理完后,再把整个level加入result,完成当前层的分组

另外,从方法的返回类型List<List<Integer>>也能看出来,设计意图就是要求返回嵌套列表——外层列表的每个元素都是对应一层的节点值列表,所以必须通过临时集合来收集每一层的元素,再统一加入结果集。如果直接添加单个值到result,不仅不符合返回类型要求,也完全违背了层序遍历「按层输出」的核心需求。

内容的提问来源于stack exchange,提问作者Mr.Frog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 04:15:08