剑指 Offer 32 - II. 从上到下打印二叉树 II

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