题目地址(102. 二叉树的层序遍历)

https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

题目描述

  1. 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
  2. 示例:
  3. 二叉树:[3,9,20,null,null,15,7],
  4. 3
  5. / \
  6. 9 20
  7. / \
  8. 15 7
  9. 返回其层序遍历结果:
  10. [
  11. [3],
  12. [9,20],
  13. [15,7]
  14. ]

前置知识


公司

  • 暂无

思路

008eGmZEly1gnad5itmk8g30iw0cqe83.gif

关键点


代码

  • 语言支持:Java

Java Code:

  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. ArrayList<List<Integer>> res = new ArrayList<>();
  19. //使用队列来存储层序遍历的节点
  20. Queue<TreeNode> queue = new LinkedList<>();
  21. if(root==null){
  22. return res;
  23. }
  24. queue.offer(root);
  25. while (!queue.isEmpty()) {
  26. ArrayList<Integer> temp = new ArrayList<>();
  27. //每次循环的时候size都不一样大小 1 -> 2 -> 4 大概这样的
  28. int len = queue.size();
  29. //循环当前层的节点数量
  30. while (len > 0) {
  31. //弹出最先进去的节点 并放到队列中
  32. TreeNode poll = queue.poll();
  33. temp.add(poll.val);
  34. //将节点的左右节点放入队列(如果有)
  35. if (poll.left != null) {
  36. queue.offer(poll.left);
  37. }
  38. if (poll.right != null) {
  39. queue.offer(poll.right);
  40. }
  41. len--;
  42. }
  43. res.add(temp);
  44. }
  45. return res;
  46. }
  47. }

复杂度分析

令 n 为数组长度。

  • 时间复杂度:二叉树的层序遍历 3 - 图2#card=math&code=O%28n%29&id=G44FD)
  • 空间复杂度:二叉树的层序遍历 3 - 图3#card=math&code=O%28n%29&id=TP7xr)