Проблема
Если root
будет nullptr
в этом выражении:
if(root->key==key||root==NULL)
, вы сначала разыменуете нулевой указатель с помощью root->key
, который является UB, перед проверкой, является ли это NULL
.
Решение
Сделайте наоборот:
if(root==nullptr||root->key==key)
В этом случае, если root равен NULL, предложение if равнонемедленно исполненТолько если root будет не NULL, указатель будет разыменован.
Примечание: вы говорите, что элемент был найден, даже если элемент не найден (т.е. root достиг nullptr, даже не обнаружив правильный ключ).Подумайте о том, чтобы иметь разные случаи для nullptr (означает, что он не был найден) и равенства (означает, что он был найден).