Переход по бинарному дереву

Ребят, такая проблема, при прохождении по дереву выдаёт исключение и завершает работу с ошибкой, хотя условие указано. Я понимаю, что проблема в том, что следующий элемент 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 и проверять на это уже не нужно:)

→ Ссылка