public BinaryNode(BinaryNode parent, T data) { Parent = parent; Data = data; }
public bool Remove(TKey key) { var node = Find(key, _root); if (node == null) { return(false); } Count--; if (node == _root) { _root = Next(node); } if (node.Left == null && node.Right == null) { if (node.Parent.Left == node) { node.Parent.Left = null; } else { node.Parent.Right = null; } } else { if (node.Left == null || node.Right == null) { if (node.Right != null) { node.Right.Parent = node.Parent; if (node.Parent != null) { if (node.Parent.Left == node) { node.Parent.Left = node.Right; } else { node.Parent.Right = node.Right; } } } else { node.Left.Parent = node.Parent; if (node.Parent != null) { if (node.Parent.Left == node) { node.Parent.Left = node.Left; } else { node.Parent.Right = node.Left; } } } } else { var next = Next(node); if (next.Parent == node) { next.Left = node.Left; node.Left.Parent = next; next.Parent = node.Parent; if (node == node.Parent.Left) { node.Parent.Left = next; } else if (node == node.Parent.Right) { node.Parent.Right = next; } } else { if (next.Right != null) { next.Right.Parent = next.Parent; } next.Parent.Left = next.Right; next.Right = node.Right; next.Left = node.Left; node.Left.Parent = next; node.Right.Parent = next; next.Parent = node.Parent; if (node.Parent != null) { if (node == node.Parent.Left) { node.Parent.Left = next; } else if (node == node.Parent.Right) { node.Parent.Right = next; } } } } } return(true); }
/// <summary> /// Замена элемента /// </summary> /// <param name="parent"></param> /// <param name="Data"></param> public void StandinNode(BinaryNode parent, T Data) { parent.Data = Data; }
public void Clear() { _root = null; Count = 0; }