9力扣题做题笔记及复盘--107.二叉树的层次遍历 II(队列,二叉树,list集合)
107. 二叉树的层序遍历 II - 力扣(LeetCode)
思路:
相对于102.二叉树的层序遍历,就是最后把result数组反转一下就可以了。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> list = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); if(root == null){ return list; } queue.offer(root); while(!queue.isEmpty()){ List<Integer> ll = new ArrayList<>(); int size = queue.size(); for(int i=0;i<size;i++){ TreeNode node = queue.poll(); ll.add(node.val); if(node.left !=null){ queue.offer(node.left); } if(node.right !=null){ queue.offer(node.right); } } list.add(ll); } //主要是在这里对旧集合进行反转 List<List<Integer>> result = new ArrayList<>(); for(int i=list.size()-1;i>=0;i--){ result.add(list.get(i)); } return result; } }
2、总结
对list的操作有点生疏,这里做个回顾总结
- 提供了一系列方便的操作对象的方法,如add、remove、set、get等
- 遍历可以采用增强for或者Iterator
List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); //增强for循环遍历list集合 for(Integer item:list){ System.out.println(item); } System.out.println("--------------------"); //获取下标为2,即集合第三个的值 System.out.println(list.get(2)); //设置下标(index)为2的元素修改为22;结果:1 2 22 4 list.set(2,22);