1. 原题
2. 分析
如果是直接要求从左到右遍历所有的节点,那么我们直接用一个队列进行存储就行了,但是现在要求返回每一层的节点。我们可以发现一个规律,当遍历完一层之后,此时队列里节点的数量正好是下一层节点的数量,因此,当我们在下一次遍历的时候先报存下来数量n,然后只出队列n次,就是下一层的所有节点了。
3. 答案
public List<List<Integer>> levelOrder(TreeNode root) {
if (null == root) {
return new ArrayList<>();
}
Queue<TreeNode> queue = new ArrayDeque<>();
queue.add(root);
List<List<Integer>> lists = new ArrayList<>();
List<Integer> list;
while (!queue.isEmpty()) {
list = new ArrayList<>();
//注意这里需要先存临时变量,不能直接for,size值是会变化的
int size = queue.size();
for (int i = 0; i < size; i++) {
root = queue.poll();
list.add(root.val);
if (null != root.left) {
queue.add(root.left);
}
if (null != root.right) {
queue.add(root.right);
}
}
lists.add(list);
}
return lists;
}