层序遍历主要是用到了集合和队列两个数据结构,思路如下:
  1. 维护一个队列,队列保存每一层所有结点
  2. list集合收集当前层的所有结点的值
  3. 遍历所有每一层,从队列中取出当前层所有结点,并收集结果到集合
  4. 左右节点按顺序加到队尾
队列的创建
Queue<TreeNode> queue=new LinkedList<>();
队列有关的方法:

throw exception
return special value
insert

add

1、增加元素不能为null

2、其他异常,比如有界队列


offer

1、元素不能为null

2、实现内部调用addFirst,既也可能抛出异常


remove

remove

队列空时:NoSuchElementException


poll

队列空时:return null


examine

element

队列空时:NoSuchElementException


peek

队列空时:return null




import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */
public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
        if(root==null) return res;
        Queue<TreeNode> queue=new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            ArrayList<Integer> list=new ArrayList<>();
            int count=queue.size();
            while(count-->0){
                TreeNode node=queue.poll();
                list.add(node.val);
                if(node.left!=null) queue.offer(node.left);
                if(node.right!=null) queue.offer(node.right);
            }
            res.add(list);
        }
        return res;
    }
}