1. class Solution {
    2. public List<List<Integer>> levelOrder(TreeNode root) {
    3. // 定义一个队列用于遍历
    4. Queue<TreeNode> queue = new ArrayDeque();
    5. // 定义一个List用于存放结果,针对每一层都是一个list
    6. List<List<Integer>> res = new ArrayList<>();
    7. //先将根节点放到队列中,然后不断遍历队列。
    8. queue.add(root);
    9. // 队列不为空就一直遍历
    10. while (!queue.isEmpty()) {
    11. // 每一次的遍历都需要初始化2个东西
    12. // 1. 当前队列的长度,也就是一层元素的数量:
    13. // 也就是本层需要循环的次数,本层有子节点的需要加入
    14. // 2. 新的list用于存放结果
    15. int curSize = queue.size();
    16. List<Integer> curList = new ArrayList();
    17. for (int i = 0; i < curSize; i++) {
    18. // 每次弹出队列的一个元素
    19. TreeNode curNode = queue.poll();
    20. // 先将结果放入list
    21. curList.add(curNode.val);
    22. // 检查其左右子树
    23. if (curNode.left != null) {
    24. queue.add(curNode.left);
    25. }
    26. if (curNode.right != null) {
    27. queue.add(curNode.right);
    28. }
    29. }
    30. // 每一层结束,res加入新的结果
    31. res.add(curList);
    32. }
    33. return res;
    34. }
    35. }