开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第N天,点击查看活动详情
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: [[3],[9,20],[15,7]]
示例 2:
输入: root = [1]
输出: [[1]]
示例 3:
输入: root = []
输出: []
提示:
- 树中节点数目在范围
[0, 2000]内 -1000 <= Node.val <= 1000
解题思路:层序遍历
这道题因为需要从左至右一层一层的遍历数据,不同于递归遍历,所以需要使用层序遍历来解决
在使用层序遍历时需要借助一个辅助性数据结构,即队列,因为队列的特点就是先进先出,跟我们的层序遍历逻辑一样
实现代码
public List<List<Integer>> levelOrder(TreeNode root) {
//创建一个队列
Queue<TreeNode> queue = new LinkedList<>();
if (root != null) {
queue.offer(root);
}
//创建集合
ArrayList<List<Integer>> list = new ArrayList<>();
while (!queue.isEmpty()) {
int size = queue.size();
//创建内集合
ArrayList<Integer> temp = new ArrayList<>();
//这里需要使用固定的size,因为队列的size是不断变化的
for (int i = 0; i < size; i++) {
//取出队列中的顶部元素
TreeNode node = queue.poll();
//添加到内集合中
temp.add(node.val);
//将node的左右子树添加到队列中,进行下次遍历
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
//将内集合中的元素添加到集合list中
list.add(temp);
}
return list;
}