题目

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

示例 1: image.png

输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]

示例 2: image.png

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

提示:

树的高度不会超过 1000
树的节点总数在 [0, 10^4] 之间

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

一个基本的429. N 叉树的层序遍历 - 图3遍历,不同于二叉树的,这里是429. N 叉树的层序遍历 - 图4叉树,遍历孩子节点时使用429. N 叉树的层序遍历 - 图5循环

代码

  1. /*
  2. // Definition for a Node.
  3. class Node {
  4. public int val;
  5. public List<Node> children;
  6. public Node() {}
  7. public Node(int _val) {
  8. val = _val;
  9. }
  10. public Node(int _val, List<Node> _children) {
  11. val = _val;
  12. children = _children;
  13. }
  14. };
  15. */
  16. class Solution {
  17. public List<List<Integer>> levelOrder(Node root) {
  18. List<List<Integer>> ans = new ArrayList<>();
  19. // 记得一开始判空
  20. if (root == null) {
  21. return ans;
  22. }
  23. Queue<Node> q = new ArrayDeque<>();
  24. q.offer(root);
  25. while (!q.isEmpty()) {
  26. int size = q.size();
  27. List<Integer> tmp = new ArrayList<>();
  28. for (int i = 0; i < size; i++) {
  29. Node node = q.poll();
  30. // 出队时保存结果
  31. tmp.add(node.val);
  32. for (Node child : node.children) {
  33. q.offer(child);
  34. }
  35. }
  36. ans.add(tmp);
  37. }
  38. return ans;
  39. }
  40. }