В этой строке
*Q = new treeNode;
вы отменяете ссылку на неинициализированный указатель (неопределенное поведение). Интересно, почему вы используете указатель на указатель? Кажется ненужным.
Если неопределенное поведение не приводит к взлому sh, ваша программа, похоже, остановится здесь:
std::cin.ignore(INT_MAX);
По сути, вы ждете, пока STDIN завершится.
Надеюсь, это поможет!