LeetCode_多叉树_中等_429.N 叉树的层序遍历

x33g5p2x  于2022-08-17 转载在 其他  
字(1.4k)|赞(0)|评价(0)|浏览(425)

1.题目

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

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

示例 1:

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

示例 2:

输入: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]]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/n-ary-tree-level-order-traversal

2.思路

(1)层序遍历
本题与102.二叉树的层序遍历这题十分相似,只不过遍历的对象由二叉树变为了多叉树,但是核心的遍历思想还是一样的,即通过 while 循环控制从上向下方向的遍历,以及 for 循环控制每一层从左向右的遍历

3.代码实现(Java)

  1. //思路1————层序遍历
  2. /*
  3. // Definition for a Node.
  4. class Node {
  5. public int val;
  6. public List<Node> children;
  7. public Node() {}
  8. public Node(int _val) {
  9. val = _val;
  10. }
  11. public Node(int _val, List<Node> _children) {
  12. val = _val;
  13. children = _children;
  14. }
  15. };
  16. */
  17. class Solution {
  18. public List<List<Integer>> levelOrder(Node root) {
  19. // res 用于保存最终的结果
  20. List<List<Integer>> res = new ArrayList<>();
  21. if (root == null) {
  22. return res;
  23. }
  24. // queue 中保存层序遍历过程中每一层的所有节点
  25. Queue<Node> queue = new LinkedList<>();
  26. // 第一层只有一个根节点,先将其加入到 queue 中
  27. queue.offer(root);
  28. // while 循环控制从上向下方向的遍历
  29. while (!queue.isEmpty()) {
  30. // levelSize 记录当前层的节点个数
  31. int levelSize = queue.size();
  32. // levelVals 保存当前层的所有节点值
  33. List<Integer> levelVals = new ArrayList<>();
  34. // for 循环控制每一层从左向右的遍历
  35. for (int i = 0; i < levelSize; i++) {
  36. Node curNode = queue.poll();
  37. levelVals.add(curNode.val);
  38. // 将当前的节点的子节点保存到 queue 中
  39. for (Node child : curNode.children) {
  40. queue.offer(child);
  41. }
  42. }
  43. // 将当前层的所有节点值加入到 res 中
  44. res.add(levelVals);
  45. }
  46. return res;
  47. }
  48. }

相关文章