1.题目
2.答案
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
if (root == null) {
return res;
}
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
// while 循环控制从上向下一层层遍历
while (!q.isEmpty()) {
int sz = q.size();
// 记录这一层的节点值
List<Integer> level = new LinkedList<>();
// for 循环控制每一层从左向右遍历
for (int i = 0; i < sz; i++) {
TreeNode cur = q.poll();
level.add(cur.val);
if (cur.left != null)
q.offer(cur.left);
if (cur.right != null)
q.offer(cur.right);
}
res.add(level);
}
return res;
}
}
-
public List<List<Integer>> levelOrder(TreeNode root) {:这是一个名为levelOrder的公共方法,接受一个名为root的二叉树节点作为输入参数,返回一个包含每一层节点值的二维整数列表。 -
List<List<Integer>> res = new LinkedList<>();:创建一个名为res的空列表,用于存储最终的结果,这是一个二维整数列表。 -
if (root == null) { return res; }:如果输入的根节点root为空(表示二叉树为空),则直接返回空的结果列表res。 -
Queue<TreeNode> q = new LinkedList<>();:创建一个队列q,用于辅助层次遍历二叉树。这个队列的元素类型是TreeNode,表示二叉树节点。 -
q.offer(root);:将根节点root添加到队列q中,作为起始节点进行遍历。 -
while (!q.isEmpty()) {:进入一个循环,只要队列q不为空,就继续遍历二叉树的每一层。 -
int sz = q.size();:获取当前队列q的大小,即当前层的节点个数。 -
List<Integer> level = new LinkedList<>();:创建一个空列表level,用于存储当前层的节点值。 -
for (int i = 0; i < sz; i++) {:进入一个循环,遍历当前层的所有节点。 -
TreeNode cur = q.poll();:从队列q中弹出一个节点,并将其赋给cur,表示当前处理的节点。 -
level.add(cur.val);:将当前节点的值cur.val添加到当前层的列表level中,记录当前层的节点值。 -
if (cur.left != null) q.offer(cur.left);:如果当前节点cur的左子节点不为空,则将左子节点添加到队列q中,以便后续遍历。 -
if (cur.right != null) q.offer(cur.right);:如果当前节点cur的右子节点不为空,则将右子节点添加到队列q中,以便后续遍历。 -
res.add(level);:将存储当前层节点值的列表level添加到结果列表res中,表示完成了对当前层的遍历。 -
循环回到步骤 7,继续处理下一层的节点,直到队列
q为空,即完成了整个二叉树的层次遍历。 -
最后,返回存储了每一层节点值的结果列表
res,即完成了层次遍历并整理好的结果