用一个size记录每一层要弹出多少个, 我知道每一轮我要搞几次

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