Да, версии, хотя на самом деле при хранении дерева, вершины ничего не знают о том, к какой дерева они принадлежат. На изображение они были добавлены только для наглядности.
Код на плюсах, потому что таким было задание. Ранее персистентными структурами пользоваться не приходилось.
А функциональным языкам это даже скорее не просто свойственно, это их неотъемлемая часть.
Монады? Из функциональных языков совсем немного сталкивался с Haskell'ем, с монадами так разобраться и не удалось, наверно, поэтому сложилось неправильное впечатление.
Персистентные деревья отрезков