private void ProceedParents (PedigreeUnit root, ICollection <PedigreeUnit> pedigree, PedigreePath path, ICollection <PedigreePath> paths) { var parents = pedigree.Where(x => x.Children.Any(y => y.ItemId.Equals(root.ItemId))).ToList(); if (!parents.Any()) { paths.Add(path); } foreach (var parent in parents) { var currentPath = path.Copy(); currentPath.AddNode(new PedigreePathNode() { Id = parent.ItemId, Name = parent.Name }); ProceedChildren(root, parent, currentPath, paths); ProceedParents(parent, pedigree, currentPath, paths); } }
private void ProceedChildren(PedigreeUnit chosenChild, PedigreeUnit parent, PedigreePath path, ICollection <PedigreePath> paths) { if (!parent.Children.Any()) { paths.Add(path); } foreach (var child in parent.Children) { if (child.ItemId.Equals(chosenChild.ItemId)) { continue; } var currentPath = path.Copy(); currentPath.AddNode(new PedigreePathNode() { Id = child.ItemId, Name = child.Name }); ProceedChildren(parent, child, currentPath, paths); } }