题外话: List<List<Integer>>的作用是什么???
首先List<Integer>指的是存int类型数据的列表,List<List<Integer>>指的是存【int类型数据的列表】类型数据的列表------有点“套娃”,大概意思就是这个母列表存子列表,其子列表存int类型的数据。

一、初始化

List<List<Integer>> res = new ArrayList<>();
或者
List<List<Integer>>list =new ArrayList<List<Integer>>(); 

二、用法

package apackage;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.LinkedList;

class Solution {

	public static void main(String[] args) throws ClassNotFoundException {
		/* 初始化 */
		List<List<Integer>> list = new ArrayList<>();
		
		/* 添加list的层和值 */
		/* 方法一 */
		list.add(new LinkedList<>());  //先添加层数
		list.get(0).add(1);          //后在指定层数进行添值:list.get(layers).add(value);
		list.add(new LinkedList<>());
		list.get(1).add(11);
		list.get(1).add(12);  //插入第layers+1层的结尾
		list.get(1).add(0,13);//插入第layers+1层的开头
		/* 方法二 */
		list.add(new LinkedList<>(Arrays.asList(1, 2, 3, 6)));
		// list.get(2).add(31);//注明:这种表达是错误的,第三层已经由Arrays.asList赋值,无法使用list.get(2).add(31)这个语句
		
		/* 输出list的层数 */
		System.out.println("list的层数为: " + list.size());
		
		/*list元素输出*/
		 System.out.println("方法一:输出list元素");
		 for (int i = 0; i < list.size(); i++) {
	            System.out.println(Arrays.toString(list.get(i).toArray()));
	     }
		 System.out.println("方法二:输出list元素");
		 for (int i = 0; i < list.size(); i++) {
			 List<Integer> item = list.get(i);      //item存第i+1层的所有元素
			 for (int j = 0; j < item.size(); j++) {
				 System.out.print(item.get(j)+",");
			 }
			 System.out.println();
	     }
		 
		 /* list元素的删除 */
		 list.remove(1);//list.remove(i)删除第i+1层所有元素
		 list.get(1).remove(0); //list.get(i).remove(j)删除第i+1层的第j+1个元素
		 System.out.println("输出删除后的结果");
		 for (int i = 0; i < list.size(); i++) {
	            System.out.println(Arrays.toString(list.get(i).toArray()));
	     }
	}
}
程序结果:

三、例题

102. Binary Tree Level Order Traversal

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        helper(res, root, 0);
        return res;
    }
    private void helper(List<List<Integer>> res, TreeNode root, int depth) {
        if (root == null) return;
        if (res.size() == depth) res.add(new LinkedList<>());
        res.get(depth).add(root.val);
        helper(res, root.left, depth + 1);
        helper(res, root.right, depth + 1);
    }
}

103. Binary Tree Zigzag Level Order Traversal

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> list = new ArrayList<>();
        if(root == null) return list;
        helper(root,list,0);
        return list;
    }

    private void helper(TreeNode root,List<List<Integer>> list,int length){
        if(root == null) return ;
        if(length == list.size()) list.add(new LinkedList<>());
        if(length%2==0) list.get(length).add(root.val);
        else  list.get(length).add(0,root.val);
        helper(root.left,list,length+1);
        helper(root.right,list,length+1);
    }
}
-----------------------END----------------------