using System.Collections.Generic;
public static void Main() {
var dummy = new Program();
var result = dummy.Run();
var csvData = GetCsvData();
var result = BuildTree(csvData, 0);
public OutType[] BuildTree(IEnumerable<CsvType> csvData, int value) {
var subordinates = new List<OutType>();
foreach(var row in csvData) {
if(row.ParentId == value) {
var child = new OutType {
Subordinates = BuildTree(csvData, row.Id)
return subordinates.ToArray();
public CsvType GetStart(IEnumerable<CsvType> data) {
foreach(var row in data) {
public IEnumerable<CsvType> GetCsvData() {
var data = new List<CsvType>() {
new CsvType() { Id = 1, Name = "Jack Sparrow", ShipName = "Black Pearl", ParentId = 0 },
new CsvType() { Id = 2, Name = "Will Turner Jr", ShipName = "Black Pearl",ParentId = 1 },
new CsvType() { Id = 3, Name = "Hector Berbossa", ShipName = "Black Pearl",ParentId = 1 },
new CsvType() { Id = 4, Name = "Elizabeth Swan", ShipName = "Black Pearl",ParentId = 2 },
new CsvType() { Id = 5, Name = "Joshamee Gibbs", ShipName = "Black Pearl",ParentId = 3 },
new CsvType() { Id = 6, Name = "Davy Jones", ShipName = "Flying Dutchman",ParentId = 0 },
new CsvType() { Id = 7, Name = "Will Turner Sr", ShipName = "Flying Dutchman", ParentId = 6 },
new CsvType() { Id = 8, Name = "Wyven", ShipName = "Flying Dutchman",ParentId = 7 },
new CsvType() { Id = 9, Name = "Maccus", ShipName = "Flying Dutchman",ParentId = 7 },
public string Name {get;set;}
public string ShipName {get;set;}
public int ParentId {get;set;}
public string Name {get;set;}
public string ShipName {get;set;}
public OutType[] Subordinates {get;set;}