public void Remove(IBinaryTreeNode <TItem> node, IBinaryTreeNode <TItem> parent) { if (node.Item.CompareTo(Item) < 0) { LeftNode?.Remove(node, this); } else if (node.Item.CompareTo(Item) > 0) { RightNode?.Remove(node, this); } else { if (LeftNode != null && RightNode != null) { parent.RightNode = MinItem; } else if (parent.LeftNode == this) { parent.LeftNode = LeftNode ?? RightNode; } else if (parent.RightNode == this) { parent.RightNode = LeftNode ?? RightNode; } } }