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; } } }