题目描述

题目一

image.png
层序遍历即可

  1. class Solution {
  2. /**
  3. * 广度优先遍历
  4. *
  5. * @param root
  6. * @return
  7. */
  8. public int[] levelOrder(TreeNode root) {
  9. if (root == null) {
  10. return new int[0];
  11. }
  12. List<Integer> list = new ArrayList<>();
  13. Queue<TreeNode> queue = new LinkedList<>();
  14. queue.offer(root);
  15. while (!queue.isEmpty()) {
  16. int len = queue.size();
  17. while (len > 0) {
  18. TreeNode node = queue.poll();
  19. list.add(node.val);
  20. if (node.left != null) queue.offer(node.left);
  21. if (node.right != null) queue.offer(node.right);
  22. len--;
  23. }
  24. }
  25. int[] res = new int[list.size()];
  26. for (int i = 0; i < res.length; i++) {
  27. res[i] = list.get(i);
  28. }
  29. return res;
  30. }
  31. }

题目二

image.png
也是层序遍历

  1. class Solution {
  2. public List<List<Integer>> levelOrder(TreeNode root) {
  3. if (root == null) {
  4. return new ArrayList<>();
  5. }
  6. List<List<Integer>> list = new ArrayList<>();
  7. Queue<TreeNode> queue = new LinkedList<>();
  8. queue.add(root);
  9. while (!queue.isEmpty()) {
  10. int len = queue.size();
  11. List<Integer> list1 = new ArrayList<>();
  12. while (len > 0) {
  13. TreeNode node = queue.poll();
  14. list1.add(node.val);
  15. if (node.left != null) queue.offer(node.left);
  16. if (node.right != null) queue.offer(node.right);
  17. len--;
  18. }
  19. list.add(list1);
  20. }
  21. return list;
  22. }
  23. }

题目三

image.png

层序遍历 + 双端队列:

  • 利用双端队列的两端皆可添加元素的特性,设打印列表(双端队列) tmp ,并规定:

    • 奇数层 则添加至 tmp 尾部
    • 偶数层 则添加至 tmp 头部

      1. /**
      2. * 双端队列
      3. *
      4. * @param root
      5. * @return
      6. */
      7. public List<List<Integer>> levelOrder(TreeNode root) {
      8. if (root == null) {
      9. return new ArrayList<>();
      10. }
      11. List<List<Integer>> list = new ArrayList<>();
      12. Queue<TreeNode> queue = new LinkedList<>();
      13. int count = 1;
      14. queue.add(root);
      15. while (!queue.isEmpty()) {
      16. int len = queue.size();
      17. LinkedList<Integer> list1 = new LinkedList<>();
      18. while (len > 0) {
      19. TreeNode node = queue.poll();
      20. if (count % 2 == 0) {
      21. list1.addLast(node.val);
      22. }else list1.addFirst(node.val);
      23. if (node.left != null) queue.offer(node.left);
      24. if (node.right != null) queue.offer(node.right);
      25. len--;
      26. }
      27. count++;
      28. list.add(list1);
      29. }
      30. return list;
      31. }

      层序遍历 + 倒序

      ```java /**

      • 反转解决 *
      • @param root
      • @return */ public List> levelOrder(TreeNode root) { if (root == null) { return new ArrayList<>(); }

      List> list = new ArrayList<>(); Queue queue = new LinkedList<>(); int count = 1; queue.add(root); while (!queue.isEmpty()) { int len = queue.size(); List list1 = new ArrayList<>(); while (len > 0) {

      1. TreeNode node = queue.poll();
      2. list1.add(node.val);
      3. if (node.left != null) queue.offer(node.left);
      4. if (node.right != null) queue.offer(node.right);
      5. len--;

      } count++; // 表示奇数行还是偶数行 if (count % 2 == 1) Collections.reverse(list1); list.add(list1); } return list; }

```