public void Delete(T value)
        {
            AVLNode <T> current = Find(value);

            if (current.ChildCount == 0)
            {
                if (current.IsLeftChild)
                {
                    current.Parent.left = null;

                    RecursiveBalacing(current.Parent);
                }
                else if (current.IsRightChild)
                {
                    current.Parent.right = null;
                    //current = null;
                    RecursiveBalacing(current.Parent);
                }
                else if (current == root)
                {
                    root = null;
                }
            }
            else if (current.ChildCount == 2)
            {
                AVLNode <T> candidate = Maximum(current.left);
                current.Value = candidate.Value;

                if (candidate.Parent != current)
                {
                    candidate.Parent.right = candidate.left;
                    RecursiveBalacing(candidate.Parent);
                }
                if (current != root)
                {
                    current.Parent        = candidate.Parent;
                    candidate.Parent.left = candidate;
                    current.left          = candidate.left;
                    candidate.left        = null;
                }
            }
            else if (current.ChildCount == 1)
            {
                AVLNode <T> child = current.left == null ? current.right : current.left;
                if (current.IsLeftChild)
                {
                    current.Parent.left = child;
                    // current = null;
                    RecursiveBalacing(current.Parent);
                }
                else if (current.IsRightChild)
                {
                    current.Parent.right = child;
                    // current = null;
                    RecursiveBalacing(current.Parent);
                }
                else if (current == root)
                {
                    // current = null;
                    root = child;
                    RecursiveBalacing(root);
                }
            }
        }