思路:
在层序遍历的基础上增加一个List,来存储当前层。
*注意在for循环里,在将现有的队列元素全部出队的同时,会循环将队列里的每一个左右节点入队。
在下一次for循环里,又会将当前层的所有元素出队,同时添加下一层的所有节点。
/** * 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) { //返回类型需要与函数写的相同 if(root == null) return new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()){ List<Integer> tmp = new ArrayList<>(); //关键在这里,不能写(int i = 0; i < queue.size(); i++) //因为运行到最后两句,queue.size()回动态变化 //只有在for循环第一句定义的时候赋值给i,才会避免循环条件改变 for(int i = queue.size(); i > 0; i--){ TreeNode node = queue.poll(); tmp.add(node.val); if(node.left != null) queue.offer(node.left); if(node.right != null) queue.offer(node.right); } res.add(tmp); } return res; } }
剑指 Offer 32 - II. 从上到下打印二叉树 II
原文:https://www.cnblogs.com/deerlet/p/14604139.html