Я думаю, вам нужно проверить обоих детей, а не только одного или другого; поскольку дерево не отсортировано по возрасту, самый старый человек в дереве может находиться в любой подветви.
Вместо:
node * rightold, * leftold, * res, * finalRes;
if (x -> right != NULL)
{
rightold = oldest (x->right);
}
else if (x -> left != NULL)
{
leftold = oldest (x->left);
}
try:
node * rightold = NULL, * leftold = NULL, * res = NULL, * finalRes = NULL;
if (x->right) rightold = oldest (x->right);
if (x->left) leftold = oldest (x->left);
Кроме того, ваш код, который сравнивает leftold
и rightold
, чтобы увидеть, какой из них старше, должен обрабатывать случай, когда один или оба из этих двух указателей равны NULL, в противном случае он будет взламывать sh при попытке разыменования. нулевой указатель.