层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而是用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。
102.二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)
示例:二叉树:[3,9,20,null,null,15,7]
返回其层序遍历结果:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if(root == null) {
return res;
}
Queue<TreeNode> que = new LinkedList<>();
que.add(root);
while(!que.isEmpty()) {
int size = que.size(); // 这里一定要使用固定大小size,不要使用que.size(),因为que.size是不断变化的
List<Integer> list = new ArrayList<>();
for(int i = 0; i < size; i++){
TreeNode cur = que.poll();
list.add(cur.val);
if(cur.left != null) {
que.add(cur.left);
}