void AddLoop(RBValNode <T> newItem, RBNode <T> curr)
        {
            int comparison = newItem.val.CompareTo(curr.val);

            if (comparison < 0)
            {
                if (curr.left is RBNullNode <T> )
                {
                    curr.left      = newItem;
                    newItem.parent = curr;
                    newItem.color  = Enums.Colors.red;
                    InsertCheck(newItem);
                    return;
                }
                AddLoop(newItem, curr.left);
            }
            else
            {
                if (curr.right is RBNullNode <T> )
                {
                    curr.right     = newItem;
                    newItem.parent = curr;
                    newItem.color  = Enums.Colors.red;
                    InsertCheck(newItem);
                    return;
                }
                AddLoop(newItem, curr.right);
            }
        }
 public void AddWithNode(RBValNode <T> newItem)
 {
     if (topNode == null)
     {
         topNode      = newItem;
         newItem.left = new RBNullNode <T>();
         InsertCheck(newItem);
         return;
     }
     AddLoop(newItem, topNode);
 }