using System.Collections.Generic;
public static void Main()
var node = new Node { Name = "1", Children = new List<Node> { new Node { Name = "11" }, new Node { Name = "12" }, new Node { Name = "13" } } };
node.Children[0].Children = new List<Node> { new Node { Name = "111" }, new Node { Name = "112" },new Node { Name = "113" } };
node.Children[2].Children = new List<Node> { new Node { Name = "131" }, new Node { Name = "132" },new Node { Name = "133" } };
node.Children[2].Children[1].Children = new List<Node> { new Node { Name = "1321" }, new Node { Name = "1322" } };
node.Children[2].Children[1].Children[0].Children = new List<Node> { new Node { Name = "13211" } };
List<Node> result = new List<Node> { node };
for(int i = start; i < end; i++)
if(result[i].HasChildren)
result.AddRange(result[i].Children);
if(result.Count == start)
Console.WriteLine(string.Join(",", result.Select(x => x.Name)));
public string Name { get; set; }
public bool HasChildren { get => Children != null && Children.Any(); }
public List<Node> Children { get; set; }