Переход по бинарному дереву
Ребят, такая проблема, при прохождении по дереву выдаёт исключение и завершает работу с ошибкой, хотя условие указано. Я понимаю, что проблема в том, что следующий элемент NULL, но не знаю как это исправить? Заранее извиняюсь за корявый, некрасивый код
int amount = 0;
void FindAmountGivenKey(char numberKey, Branch* aBranch)
{
if (aBranch->LeftBranch != nullptr && aBranch->Data == numberKey) { //ERROR!!!!!!!!!!!!
amount++;
}
FindAmountGivenKey(numberKey, aBranch->LeftBranch);
if (aBranch->RightBranch != nullptr && aBranch->Data == numberKey) {
amount++;
}
FindAmountGivenKey(numberKey, aBranch->RightBranch);
return ;
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
В большинстве случаев, если в функцию прилетает указатель, то хорошо бы его сразу проверить на nullptr. Где то так
{
if (aBranch == nullptr) return;
if (aBranch->LeftBranch != nullptr && aBranch->Data == numberKey) {
amount++;
}
FindAmountGivenKey(numberKey, aBranch->LeftBranch);
if (aBranch->RightBranch != nullptr && aBranch->Data == numberKey) {
amount++;
}
FindAmountGivenKey(numberKey, aBranch->RightBranch);
return ;
}
отдельно замечу, что если написать вот так
if (aBranch->LeftBranch != nullptr && aBranch->Data == numberKey && aBranch != nullptr)
хоть и выглядит похоже, но работать не будет так как нужно. Самое интересное, что после того, как компилятор видит разыменование, он имеет право считать, что указатель уже не nullptr и проверять на это уже не нужно:)