题目描述:
    image.png
    image.png
    解析:定义一个指针,永远指向当前层的最后一个节点,而if (poll == p) 就说明是当前层结束了,p指向队列的末尾元素

    1. class Solution {
    2. public List<List<Integer>> levelOrder(TreeNode root) {
    3. if (root == null) return new ArrayList<>();
    4. //指针
    5. LinkedList<TreeNode> queue = new LinkedList<>();
    6. List<Integer> path = new ArrayList<>();
    7. List<List<Integer>> res = new ArrayList<>();
    8. TreeNode p = root; // 定义一个指针,永远指向当前层的最后一个节点
    9. queue.offer(root);
    10. while (!queue.isEmpty()) {
    11. TreeNode poll = queue.poll();
    12. path.add(poll.val);
    13. if (poll.left != null) {
    14. queue.offer(poll.left);
    15. }
    16. if (poll.right != null) {
    17. queue.offer(poll.right);
    18. }
    19. if (poll == p) { // 说明是当前层结束了
    20. res.add(path);
    21. path = new ArrayList<>();
    22. if (!queue.isEmpty()) {
    23. p = queue.getLast();
    24. }
    25. }
    26. }
    27. return res;
    28. }
    29. }