给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
- Queue:
- offer 新元素进队列
- peek 取队列队首元素
- poll 队首元素出队列
使用队列来进行二叉树的层级遍历:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
// 初始化:第一层
queue.offer(root);
// 边界条件:当队列不为空
while(!queue.isEmpty()) {
// 当前层级
int size = queue.size();
// 用来保存当前层即的数据
List<Integer> level = new ArrayList<>();
for(int i = 0; i < size ; ++i) {
// 去除队列顶部的值
TreeNode cur = queue.peek();
// 出队列
queue.poll();
if(cur == null) {
continue;
}
level.add(cur.val);
// 将当前节点的左右子节点加入队列
queue.offer(cur.left);
queue.offer(cur.right);
}
if(!level.isEmpty()) {
result.add(level);
}
}
return result;
}