Ошибка std::bad_alloc — из-за чего?
Ну а я повторю свой оригинальный ответ:  без полного исходного текста можно сказать только то, что ошибка, скорее всего, где-то в другом месте. И замена объектов ссылками просто замаскировала проблему на время.
Хотя у меня есть одно предположение: возможно вы неправильно строите дерево и некоторые его узлы являются своими собственными детьми.
Если маленькие объекты выделяются, а большие нет. И при этом память точно не закончилась - то самая вероятная причина - фрагментирование кучи. 
Самый простой способ решить эту проблему - всегда компилироваться в x64.