internal void RemoveParent(TreeElement<T> parent) { _parents.Remove(parent); parent._children.Remove(this); PathCountRecalulate(); }
internal void RemoveChild(TreeElement<T> child) { _children.Remove(child); child._parents.Remove(this); child.PathCountRecalulate(); }
private static IEnumerable <TreeElement <T> > GetElementsDownWithDuplicates <T>(TreeElement <T> element) { foreach (TreeElement <T> child in element.Children) { yield return(child); if (child.HasChildren) { foreach (TreeElement <T> grandchild in GetElementsDownWithDuplicates(child)) { yield return(grandchild); } } } }
internal static IEnumerable <TreeElement <T> > GetElementsDown <T>(TreeElement <T> element) { var elementsWeFound = new HashSet <TreeElement <T> >(); return(GetElementsDown(element, elementsWeFound)); }
/// <summary> /// Удаляет все ветки, которые расположены после данного элемента /// </summary> /// <param name="startElement"></param> public void RemoveBranchesAfter(TreeElement <T> startElement) { startElement.RemoveAllParents(); RemoveDown(startElement); RecalculateBrachCount(); }
public TreeDecision() { Root = new TreeElement <T>(); _elements = new HashSet <TreeElement <T> >(); _branchCount = 1; }