1. 题目
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
1 2
| 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]
|
示例 2:
示例 3:
提示:
- 树中节点数目在范围
[0, 2000]
内
-1000 <= Node.val <= 1000
2. 思路
- 已知题目要求按照层序遍历记录二叉树的层序序列
- 初始化结果集合列表
result
与队列queue
,其中队列用于记录下每一层的节点
- 二叉树层序遍历中,主要利用的是每一层的固定节点数量,并利用队列先进先出的特性,可以取出对应一层的节点序列
- 并在取出记录值的过程中,判断其下一层(也就是其
left
与right
节点)是否存在,存在则继续写入队列中以供后续遍历
- 在完成一层遍历时,将该层的层序序列记录至结果集合列表
result
中
3. 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if (root == null) { return List.of(); }
var result = new ArrayList<List<Integer>>(); var queue = new ArrayDeque<TreeNode>(); queue.offer(root);
while (!queue.isEmpty()) { var size = queue.size(); var layerList = new ArrayList<Integer>(size);
for (var i = 0; i < size; ++i) { var node = queue.poll(); layerList.add(node.val);
if (node.left != null) { queue.offer(node.left); }
if (node.right != null) { queue.offer(node.right); } }
result.add(layerList); }
return result; } }
|
4. 复杂度
Author:
zchengb
License:
Copyright (c) 2019-2024 zchengb