原题链接在这里:https://leetcode.com/problems/n-ary-tree-level-order-traversal/
题目:
Given an n-ary tree, return the level order traversal of its nodes' values.
Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value (See examples).
Example 1:
Input: root = [1,null,3,2,4,null,5,6] Output: [[1],[3,2,4],[5,6]]
Example 2:
Input: 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] Output: [[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
Constraints:
- The height of the n-ary tree is less than or equal to
1000
- The total number of nodes is between
[0, 10^4]
题解:
When iterating by BFS, for current level node, accumulate the count of next level using node's children.
When current level node count == 0, add current list to res, empty current list and comes to next level.
Time Complexity: O(V+E). V is node count. E is edge count.
Space: O(V).
AC Java:
1 /* 2 // Definition for a Node. 3 class Node { 4 public int val; 5 public List<Node> children; 6 7 public Node() {} 8 9 public Node(int _val) { 10 val = _val; 11 } 12 13 public Node(int _val, List<Node> _children) { 14 val = _val; 15 children = _children; 16 } 17 }; 18 */ 19 class Solution { 20 public List<List<Integer>> levelOrder(Node root) { 21 List<List<Integer>> res = new ArrayList<>(); 22 if(root == null){ 23 return res; 24 } 25 26 LinkedList<Node> que = new LinkedList<>(); 27 que.add(root); 28 int curCount = 1; 29 int nextCount = 0; 30 List<Integer> item = new ArrayList<>(); 31 while(!que.isEmpty()){ 32 Node cur = que.poll(); 33 curCount--; 34 item.add(cur.val); 35 36 for(Node child : cur.children){ 37 que.add(child); 38 nextCount++; 39 } 40 41 if(curCount == 0){ 42 curCount = nextCount; 43 nextCount = 0; 44 45 res.add(new ArrayList<Integer>(item)); 46 item = new ArrayList<>(); 47 } 48 } 49 50 return res; 51 } 52 }