LeetCode 429. N-ary Tree Level Order Traversal
原题链接在这里: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 nodes, get the size of queue. Iterate each of them.
Add node's value to item and if any of its children is not null, add them to queue.
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 20 class Solution { 21 public List<List<Integer>> levelOrder(Node root) { 22 List<List<Integer>> res = new ArrayList<>(); 23 if(root == null){ 24 return res; 25 } 26 27 LinkedList<Node> que = new LinkedList<>(); 28 que.add(root); 29 while(!que.isEmpty()){ 30 int size = que.size(); 31 List<Integer> item = new ArrayList<>(); 32 while(size-- > 0){ 33 Node cur = que.poll(); 34 item.add(cur.val); 35 for(Node node : cur.children){ 36 if(node != null){ 37 que.add(node); 38 } 39 } 40 } 41 42 res.add(item); 43 } 44 45 return res; 46 } 47 }
AC C++:
1 /* 2 // Definition for a Node. 3 class Node { 4 public: 5 int val; 6 vector<Node*> children; 7 8 Node() {} 9 10 Node(int _val) { 11 val = _val; 12 } 13 14 Node(int _val, vector<Node*> _children) { 15 val = _val; 16 children = _children; 17 } 18 }; 19 */ 20 21 class Solution { 22 public: 23 vector<vector<int>> levelOrder(Node* root) { 24 vector<vector<int>> res; 25 if(!root){ 26 return res; 27 } 28 29 queue<Node*> que; 30 que.push(root); 31 32 while(!que.empty()){ 33 int size = que.size(); 34 vector<int> item; 35 while(size-- > 0){ 36 Node* cur = que.front(); 37 que.pop(); 38 item.push_back(cur->val); 39 for(Node* child : cur->children){ 40 if(child){ 41 que.push(child); 42 } 43 } 44 } 45 46 res.push_back(item); 47 } 48 49 return res; 50 } 51 };
AC Python:
1 """ 2 # Definition for a Node. 3 class Node: 4 def __init__(self, val=None, children=None): 5 self.val = val 6 self.children = children 7 """ 8 9 class Solution: 10 def levelOrder(self, root: 'Node') -> List[List[int]]: 11 res = [] 12 if not root: 13 return res 14 15 que = deque([root]) 16 while que: 17 size = len(que) 18 item = [] 19 for i in range(size): 20 cur = que.popleft() 21 item.append(cur.val) 22 for child in cur.children: 23 if child: 24 que.append(child) 25 26 res.append(item) 27 return res 28
类似Binary Tree Level Order Traversal, N-ary Tree Preorder Traversal.