LeetCode 0429. N-ary Tree Level Order Traversal Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0429. N-ary Tree Level Order Traversal

Description

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, 104]

Solutions

Solution 1: BFS

First, we check if the root node is null. If it is, we return an empty list directly.

Otherwise, we create a queue q and initially add the root node to the queue.

When the queue is not empty, we loop through the following operations:

  1. Create an empty list t to store the values of the current level nodes.
  2. For each node in the queue, add its value to t and add its child nodes to the queue.
  3. Add t to the result list ans.

Finally, return the result list ans.

The time complexity is O(n), and the space complexity is O(n). Here, n is the number of nodes in the N-ary tree.

PythonJavaC++GoTypeScript
""" # Definition for a Node. class Node: def __init__(self, val=None, children=None): self.val = val self.children = children """ class Solution: def levelOrder(self, root: 'Node') -> List[List[int]]: ans = [] if root is None: return ans q = deque([root]) while q: t = [] for _ in range(len(q)): root = q.popleft() t.append(root.val) q.extend(root.children) ans.append(t) return ans(code-box)

Solution 2: DFS

We can use the Depth-First Search method to traverse the entire tree.

We define a helper function dfs(root, i), where root represents the current node, and i represents the current level.

In the dfs function, we first check if root is null. If it is, we return directly.

Otherwise, we check if the length of ans is less than or equal to i. If it is, it means that the current level has not been added to ans yet, so we need to add an empty list first. Then we add the value of root to ans[i].

Next, we traverse all child nodes of root. For each child node, we call dfs(child, i + 1).

In the main function, we call dfs(root, 0) and return ans.

The time complexity is O(n), and the space complexity is O(n). Here, n is the number of nodes in the N-ary tree.

PythonJavaC++GoTypeScript
""" # Definition for a Node. class Node: def __init__(self, val=None, children=None): self.val = val self.children = children """ class Solution: def levelOrder(self, root: 'Node') -> List[List[int]]: def dfs(root, i): if root is None: return if len(ans) <= i: ans.append([]) ans[i].append(root.val) for child in root.children: dfs(child, i + 1) ans = [] dfs(root, 0) return ans(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !