List <List <string> > TraverseTree(NArrayTreeNode root)
        {
            List <List <string> > result = new List <List <string> >();

            if (root == null)
            {
                return(result);
            }
            Queue <NArrayTreeNode> q = new Queue <NArrayTreeNode>();

            q.Enqueue(root);
            while (q.Count > 0)
            {
                int           length = q.Count;
                List <string> res    = new List <string>();
                while (length-- > 0)
                {
                    var item = q.Dequeue();
                    res.Add(item.val);
                    item.children.ForEach(child => q.Enqueue(child));
                }
                result.Add(res);
            }

            return(result);
        }
        static void Main(string[] args)
        {
            Program prog = new Program();
            //TreeNode root = new TreeNode(1);
            //root.left = new TreeNode(2);
            //root.right = new TreeNode(3);
            //root.left.left = new TreeNode(4);
            //root.left.right = new TreeNode(5);
            //root.right.right = new TreeNode(7);
            //var result = p.LevelOrder(root);
            //foreach(var res in result)
            //             Console.WriteLine(string.Join(",", res));

            NArrayTreeNode body = new NArrayTreeNode("<body>");
            NArrayTreeNode div1 = new NArrayTreeNode("<div>");
            NArrayTreeNode div2 = new NArrayTreeNode("<div>");
            NArrayTreeNode h1   = new NArrayTreeNode("<h1>");
            NArrayTreeNode h2   = new NArrayTreeNode("<h2>");
            NArrayTreeNode h3   = new NArrayTreeNode("<h3>");
            NArrayTreeNode a    = new NArrayTreeNode("<a>");
            NArrayTreeNode p    = new NArrayTreeNode("<p>");

            body.children = new List <NArrayTreeNode>()
            {
                div1, h1, div2
            };
            div1.children = new List <NArrayTreeNode>()
            {
                h2, h3
            };
            div2.children = new List <NArrayTreeNode>()
            {
                a, p
            };
            var result = prog.TraverseTree(body);

            foreach (var res in result)
            {
                Console.WriteLine(string.Join(",", res));
            }
        }