Все ли родители определены до детей?
Если это так, вы можете использовать Словарь (int, List (Item)) (извините за скобки, не может показатьсячтобы заставить работать угловые скобки) где, скажем,
public class Item {
public int Id { get; set;}
public int ParentId { get; set;}
public string Title {get; set;}
}
IDictionary<int, List<Item>> CreateTree(IEnumerable<Item> nodeList){
var ret = new Dictionary<int, List<Item>>();
foreach (var item in items) {
if (!ret.ContainsKey(item.ParentId)) {
ret.Add(item.ParentId, new List<Item>());
}
ret[item.ParentId].Add(item);
}
return ret;
}
Это даст (для приведенных выше данных)
0 => level1
1 => level2, level4
2 => level3
Если родительские идентификаторы не гарантированы до дочерних идентификаторов, то вам нужно добавить некоторые настройки, чтобы учесть сирот, а затем добавить, а затем обработать ихв конце.
Надеюсь, это поможет,
Алан.