public void Add(T value) { if (root == null) { root = new Node <T>(value); } else { RecursiveAdd(root, value); } if (NodeAdded != null) { TreeEventArgs e = new TreeEventArgs(); e.Value = value; NodeAdded(this, e); } }
public bool Remove(T value) { //Node<T> node = FindNodeByValue(root, value); Node <T> node = root; do { if (value.CompareTo(node.Value) < 0) { node = node.LeftChild; } else if (value.CompareTo(node.Value) > 0) { node = node.RightChild; } if (node == null) { return(false); } } while (value.CompareTo(node.Value) != 0); if (node == null) { return(false); } if (node != null) { int result = node.Value.CompareTo(node.Parent.Value); if (node.LeftChild == null && node.RightChild == null) // перший випадок - нема дітей { if (node.Parent.LeftChild == node) { node.Parent.LeftChild = null; } else { node.Parent.RightChild = null; } } else if ((node.LeftChild == null && node.RightChild != null) || (node.LeftChild != null && node.RightChild != null)) // другий випадок - одна дитина { if (node.LeftChild == null) { if (node.Parent.LeftChild == node) { node.Parent.LeftChild = node.RightChild; } else { node.Parent.RightChild = node.RightChild; } } else { if (node.Parent.LeftChild == node) { node.Parent.LeftChild = node.LeftChild; } else { node.Parent.RightChild = node.LeftChild; } } } else // третій випадок - є дві дитини { Node <T> succesor = node.RightChild; while (succesor.LeftChild != null) { succesor = succesor.LeftChild; } node.Value = succesor.Value; if (succesor.Parent.LeftChild == succesor) { succesor.Parent.LeftChild = succesor.RightChild; if (succesor.RightChild != null) { succesor.RightChild.Parent = succesor.Parent; } } else { succesor.Parent.RightChild = succesor.LeftChild; if (succesor.LeftChild != null) { succesor.RightChild.Parent = succesor.Parent; } } } } if (NodeRemoved != null) { TreeEventArgs e = new TreeEventArgs(); e.Value = value; NodeRemoved(this, e); } return(true); }