public AvlNode <T> SetItem(int index, T val)
        {
            AvlNode <T> newLt = _left;
            AvlNode <T> newGt = _right;

            if (index < _left._count)
            {
                newLt = _left.SetItem(index, val);
            }
            else if (index > _left._count)
            {
                newGt = _right.SetItem(index - _left._count - 1, val);
            }
            else
            {
                return(NewOrMutate(val, newLt, newGt));
            }
            return(NewOrMutate(Value, newLt, newGt));
        }