题目

Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).

For example:
Given binary tree [3,9,20,null,null,15,7],

  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7

return its level order traversal as:

  1. [
  2. [3],
  3. [9,20],
  4. [15,7]
  5. ]

题意

按从上到下的顺序记录二叉树的每一层。

思路

BFS。


代码实现

Java

  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. List<List<Integer>> ans = new ArrayList<>();
  13. Queue<TreeNode> q = new ArrayDeque<>();
  14. if (root != null) {
  15. q.offer(root);
  16. }
  17. while (!q.isEmpty()) {
  18. List<Integer> list = new ArrayList<>();
  19. int size = q.size();
  20. for (int i = 0; i < size; i++) {
  21. TreeNode cur = q.poll();
  22. list.add(cur.val);
  23. if (cur.left!=null) q.offer(cur.left);
  24. if (cur.right!=null) q.offer(cur.right);
  25. }
  26. ans.add(list);
  27. }
  28. return ans;
  29. }
  30. }

JavaScript

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val, left, right) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.left = (left===undefined ? null : left)
  6. * this.right = (right===undefined ? null : right)
  7. * }
  8. */
  9. /**
  10. * @param {TreeNode} root
  11. * @return {number[][]}
  12. */
  13. var levelOrder = function (root) {
  14. const ans = []
  15. const q = []
  16. if (root) q.push(root)
  17. while (q.length) {
  18. const size = q.length
  19. const tmp = []
  20. for (let i = 0; i < size; i++) {
  21. const cur = q.shift()
  22. if (cur.left) q.push(cur.left)
  23. if (cur.right) q.push(cur.right)
  24. tmp.push(cur.val)
  25. }
  26. ans.push(tmp)
  27. }
  28. return ans
  29. }