Извините, но я никогда не делал C #. Таким образом, пример кода не будет.
Однако вам не должно быть слишком сложно это сделать.
Рекурсивное определение isBalanced () никогда не даст наилучшей производительности. Причина проста: дерево все еще может быть неуравновешенным, если все поддеревья сбалансированы. Таким образом, вы не можете просто пройти через дерево один раз.
Однако ваша функция height () уже делает правильные вещи. Он посещает каждый узел дерева только один раз, чтобы найти высоту (то есть максимальную длину от корня до листа).
Все, что вам нужно сделать, это написать функцию minDistance (), которая находит минимальную длину от корня до листа. Вы можете сделать это, используя почти тот же код.
С этими функциями дерево уравновешивается тогда и только тогда, когда высота (...) == minDistance (...).
Наконец, вы можете объединить обе функции в одну, которая возвращает пару (min, max). Это не изменит сложность времени, но может немного сократить время выполнения, если возвращение пар не слишком дорого в C #