//public SupportingNode Delete(SupportingNode parent, int key)
 public SupportingNode <T> Delete(SupportingNode <T> parent, T key)
 {
     if (parent == null)
     {
         return(parent);
     }
     if (key.CompareTo(parent.Data) < 0)
     {
         parent.LeftNode = Delete(parent.LeftNode, key);
     }
     else if (key.CompareTo(parent.Data) > 0)
     {
         parent.RightNode = Delete(parent.RightNode, key);
     }
     else
     {
         if (parent.LeftNode == null)
         {
             return(parent.RightNode);
         }
         else if (parent.RightNode == null)
         {
             return(parent.LeftNode);
         }
         parent.Data      = Minimum(parent.RightNode);
         parent.RightNode = Delete(parent.RightNode, parent.Data);
     }
     return(parent);
 }
 //public void TreeTraverse(SupportingNode parent)
 public void TreeTraverse(SupportingNode <T> parent)
 {
     if (parent != null)
     {
         TreeTraverse(parent.LeftNode);
         Console.Write($"{parent.Data} ");
         TreeTraverse(parent.RightNode);
     }
 }
        //public int Minimum(SupportingNode node)
        public T Minimum(SupportingNode <T> node)
        {
            T min = node.Data;

            while (node.LeftNode != null)
            {
                min  = node.LeftNode.Data;
                node = node.LeftNode;
            }
            return(min);
        }
        public void Insert(T input)
        {
            //SupportingNode previous = null, current = this.Root;
            SupportingNode <T> previous = null, current = this.Root;

            while (current != null)
            {
                previous = current;
                if (input.CompareTo(previous.Data) <= 0)
                {
                    current = current.LeftNode;
                }
                else
                {
                    current = current.RightNode;
                }
            }
            //SupportingNode support = new SupportingNode();
            SupportingNode <T> support = new SupportingNode <T>
            {
                Data = input
            };

            if (this.Root == null)
            {
                this.Root = support;
            }
            else
            if (input.CompareTo(previous.Data) <= 0)
            {
                previous.LeftNode = support;
            }
            else
            {
                previous.RightNode = support;
            }
        }
 public void Delete(T input)
 {
     this.Root = Delete(this.Root, input);
 }