https://leetcode.com/problems/n-ary-tree-level-order-traversal/
Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example, given a 3-ary tree:
We should return its level order traversal:
[ [1], [3,2,4], [5,6] ]
Note:
The depth of the tree is at most 1000. The total number of nodes is at most 5000.
Please comment about space and time complexity. Thanks.
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace GraphsQuestions
{
/// <summary>
/// https://leetcode.com/problems/n-ary-tree-level-order-traversal/
/// </summary>
[TestClass]
public class N_aryTreeLevelOrderTraversal
{
[TestMethod]
public void N_aryTreeLevelOrderTraversalTest()
{
List<Node> node3 = new List<Node>();
node3.Add(new Node(5, null));
node3.Add(new Node(6, null));
List<Node> node1 = new List<Node>();
node1.Add(new Node(3, node3));
node1.Add(new Node(2, null));
node1.Add(new Node(4, null));
Node root = new Node(1, node1);
var result = LevelOrder(root);
IList<IList<int>> expected = new List<IList<int>>();
expected.Add(new List<int>{1});
expected.Add(new List<int>{3,2,4});
expected.Add(new List<int>{5,6});
for (int i = 0; i < 3; i++)
{
CollectionAssert.AreEqual(expected[i].ToArray(), result[i].ToArray());
}
}
public IList<IList<int>> LevelOrder(Node root)
{
IList<IList<int>> result = new List<IList<int>>();
Queue<Node> Q = new Queue<Node>();
if (root == null)
{
return result;
}
Q.Enqueue(root);
while (Q.Count > 0)
{
List<int> currentLevel = new List<int>();
int qSize = Q.Count;
for (int i = 0; i < qSize; i++)
{
var curr = Q.Dequeue();
currentLevel.Add(curr.val);
if (curr.children != null)
{
foreach (var child in curr.children)
{
Q.Enqueue(child);
}
}
}
result.Add(currentLevel);
}
return result;
}
}
}