题外话: 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----------------------