Вы возвращаетесь в showTreePreOrder и сталкиваетесь с переполнением стека. Запуск его в отладчике сказал мне об этом менее чем за одну минуту.
EDIT:
Ваша проблема в этом разделе cutLeaf (). Во-первых, вы предполагаете, что Leafptr-> SX не равен нулю, и вы удаляете его, но он равен нулю для последнего листа. Во-вторых, когда вы удаляете лист, вы не устанавливаете указатель DX его родителя в нуль. Поэтому, когда вы пересекаете список, вы пересекаете листья, которые были освобождены.
else if (Leafptr->DX == NULL)
{
tempLeafptr = Leafptr;
Leafptr = Leafptr->SX;
delete tempLeafptr;
return true;
}
Те же проблемы существуют в предложении else.