这道题的思想比较简单,注意一个点就是关于队列中要不要放入空节点。
如果队列中有空节点,那么在将每一层的节点值放入该层的list之前,我们肯定会判断当前节点是否为null,但是这样的话就会导致二叉树的最后一层下面的所有空节点也单独成为一层。那么最后的答案res中将会在最后多一个空list,这就不符合规定了。

所以最好还是不要让空节点放入到队列中,在节点入队之前就判断一下该节点是否为空。

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) {
        // write code here
        ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
        if(root == null) return ans;
        LinkedList<TreeNode> queue = new LinkedList<>();
        queue.add(root); //将头结点入队
        while(!queue.isEmpty()){
            int size = queue.size();
            ArrayList <Integer> list = new ArrayList<>();
            while(size > 0){
                TreeNode node = queue.pollFirst();
                size--;
                list.add(node.val);
                //此处需要注意,在队列里面最好不要放空节点,
                //如果有空节点的话,那么最后的结果ans中一定会多一个空list,
                //因为二叉树最后一层之后的空节点被你放进去了
                if(node.left != null) queue.addLast(node.left);
                if(node.right != null) queue.addLast(node.right);
            }
            ans.add(list);
        }
        return ans;
    }
}