public static IEnumerable<Node> OrderChildsBySiblingsDependencies(IReadOnlyList<Node> childs) { foreach (var child in childs.Where(child => child.Childs.Any())) { child.SetChildren(OrderChildsBySiblingsDependencies(child.Childs)); } if (!childs.SiblingDependencies().Any()) { if (childs.Any() && childs.First().Parent != null) childs.First().Parent.Orientation = OrientationKind.Horizontal; return childs; } var oldChildList = childs.ToHashSet(); var newChildOrder = GroupNodes(oldChildList); return newChildOrder; }