给定一颗二叉树,请返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。
    示例:
    二叉树 [3, 9, 20, null, null, 15, 7]
    3
    / \
    9 20
    / \
    15 7
    返回其层序遍历结果:
    [
    [3],
    [9,20],
    [15,7]
    ]

    1. /**
    2. * Definition for a binary tree node.
    3. * public class TreeNode {
    4. * int val;
    5. * TreeNode left;
    6. * TreeNode right;
    7. * TreeNode() {}
    8. * TreeNode(int val) { this.val = val; }
    9. * TreeNode(int val, TreeNode left, TreeNode right) {
    10. * this.val = val;
    11. * this.left = left;
    12. * this.right = right;
    13. * }
    14. * }
    15. */
    16. class Solution {
    17. public List<List<Integer>> levelOrder(TreeNode root) {
    18. List<List<Integer>> list = new ArrayList<>();
    19. if (root == null) {
    20. return list;
    21. }
    22. Queue<TreeNode> queue = new LinkedList<>();
    23. queue.offer(root);
    24. while(!queue.isEmpty()) {
    25. List<Integer> level = new ArrayList<>();
    26. int size = queue.size();
    27. for(int i = 0; i < size; i++) {
    28. TreeNode cur = queue.poll();
    29. level.add(cur.val);
    30. if(cur.left != null) {
    31. queue.offer(cur.left);
    32. }
    33. if(cur.right != null) {
    34. queue.offer(cur.right);
    35. }
    36. }
    37. list.add(level);
    38. }
    39. return list;
    40. }
    41. }

    基于上述代码,可以得到的对二叉树层序遍历的经验总结大体为:

    • 设置一个list,用于存放层序遍历的结果。
    • 设置一个Queue队列,利用其先进先出的特点存放二叉树的节点。
    • 用while循环判断并处理队列中的节点。
      • 将节点从队列中弹出并加入列表
      • 判断当前弹出节点的左右子节点,如果不为空,则将其放入队列中
    • 最后结束循环,返回list列表。