Итак, я работаю над функцией двоичного поиска. Почему я должен добавить знак & перед указателем на узел? Я думал, что это уже указатель, и он уже указывает на местоположение. Я понимаю, что если я добавлю узел, то мне нужно убедиться, что родительский узел указывает на новый узел или узел родителя будет по-прежнему указывать на NULL. Но почему бы мне не сделать это, если я передам указатель на узел как узел * &?Двоичное дерево поиска. Указатель как ссылочный параметр
bool bst::remove123(int data, node*& x)
{
if (x == NULL)
{
return false;
}
else if (x->getData() < data)
{
return remove123(data, x->right);
}
else if (x->getData() > data)
{
return remove123(data, x->left);
}
else
{
node* old = x;
if (x->left == NULL)
{
x = x->right;
}
else if (x->right == NULL)
{
x = x->left;
}
else
{
replacement(old, x->left);
}
delete old;
return true;
}
}
Спасибо
'&' здесь не адрес-оператора, это ссылочное объявление. Вам нужно вернуться и перечитать объяснение указателей и ссылок в вашей книге на C++. Причина, по которой параметр должен быть ссылкой, заключается в том, что при удалении узла исходный указатель на удаляемый узел должен быть заменен, и самый простой способ сделать это в этом рекурсивном контексте - использовать ссылку , См. Вашу книгу на C++ для получения дополнительной информации о ссылках. –
Вы передаете ссылку на тип указателя 'T * &', когда вам нужно изменить указатель типа 'T *'. Ссылка на тип указателя похожа на ссылку на любой другой тип. –