https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
    给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

    示例:
    二叉树:[3,9,20,null,null,15,7],

    1. 3<br /> / \<br /> 9 20<br /> / \<br /> 15 7<br />返回其层序遍历结果:

    [
    [3],
    [9,20],
    [15,7]
    ]

    定义一个队列用于节点的操作。定义当前节点个数,和下一层节点的个数
    循环条件即为队列不为空!!!
    for循环当前节点的个数
    出队列,将其val保存在list中
    如果左孩子不为空,入队,nextnum++
    如果右孩子不为空,入队,nextnum++
    然后将nextnum赋值给curnum
    res.add(list)
    image.png

    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. if(root == null){
    19. return new ArrayList<>();
    20. }
    21. //保存结果
    22. List<List<Integer>> res = new ArrayList<>();
    23. //1.定义一个队列,用于对节点进行操作
    24. Queue<TreeNode> queue = new LinkedList<>();
    25. queue.offer(root);
    26. int curnum = 1;//用于存储当前节点的个数
    27. while(!queue.isEmpty()){
    28. List<Integer> list = new ArrayList<>();
    29. int nextnum = 0;//存储下一层节点的个数
    30. for(int i = 0; i<curnum; i++){
    31. TreeNode node = queue.poll();//当前有多少节点就弹出多少次
    32. list.add(node.val);
    33. //对于当前节点的左右孩子(如果不为空的话)入队列
    34. if(node.left!=null){
    35. queue.offer(node.left);
    36. nextnum++;
    37. }
    38. if(node.right!=null){
    39. queue.offer(node.right);
    40. nextnum++;
    41. }
    42. }
    43. res.add(list);
    44. curnum = nextnum;
    45. }
    46. return res;
    47. }
    48. }