Ваша ошибка в следующей части, и из-за этого ваша программа завершает работу, не показывая ошибку
if (n == NULL) {
n->height = 0;
}
Когда n равно NULL;Вы не должны пытаться получить доступ к n-> высоте. Замените его следующим образом, и ваш код будет работать:
if (n == NULL) {
return;
}
Кроме того, как уже упоминалось в другом ответе, когда вы хотите вычислить высоту рекурсивно, вам не нужен цикл while, просто используйте следующую рекурсивную формулу:
Height(n) = 1 + max(Height(n->left), Height(n->right))
Кроме того, по соображениям согласованности обычно высота NULL поддерева определяется как -1. Это позволяет рекурсивной формуле работать правильно.
Совет: Чтобы отладить любую программу, проще всего просто напечатать сообщения до и после вызовов функций и / или определенных строк. ,Таким образом, проверяя, какие сообщения не напечатаны, вы можете быстро определить, какие функции / строки вызывают проблему, а затем исследовать их.