public static T RemoveInOrderPredecessor(ref AVLTreeNode <T> node)
        {
            if (node.Right != null)
            {
                T ret1 = RemoveInOrderPredecessor(ref node.Right);
                node.UpdateHeight();
                node = node.PerformRotations();
                return(ret1);
            }

            T ret = node.Value;

            node = node.Left;
            return(ret);
        }
        public static T RemoveInOrderSuccessor(ref AVLTreeNode <T> node)
        {
            if (node.Left != null)
            {
                node.LeftChildren--;
                T ret1 = RemoveInOrderSuccessor(ref node.Left);
                node.UpdateHeight();
                node = node.PerformRotations();
                return(ret1);
            }

            T ret = node.Value;

            node = node.Right;
            return(ret);
        }