Проблема в том, что вы используете вектор , который внутренне (пере) распределяет хранилище по мере необходимости.
Так что при возврате в вектор это вполне можетбудь то, что все внутренние данные копируются в какую-то другую область памяти, что делает все указатели, которые все еще указывают на старые местоположения, недействительными.
Простое "исправление" было бы резерв определенное количествопространства для вектора, так что вы можете по крайней мере сохранить определенное количество узлов в нем без перераспределения.
Например, добавив это в начале ваших конструкторов RootedTree
:
T.reserve(64);
Обратите внимание, что это не надежное решение (если вы попытаетесь поместить более 64 узлов в вектор, у вас все еще может возникнуть та же проблема) - но это подтвердит приведенный выше анализ.