Давайте посмотрим на эту проблему с другой точки зрения.
Вместо максимальной высоты для данного количества узлов, давайте найдем минимальное количество узлов для данной высоты.Для этой проблемы у нас есть эта рекурсивная функция: n(h) = n(h-1) + n(h-2) + 1
, потому что вам нужно как минимум n(h-1)
узлов в правом поддереве и n(h-2)
узлов в левом поддереве и один узел для корня.
(изображение и более полное объяснение здесь ).
Имея это в виду, вы должны найти h
такойчто n(h) < n < n(h+1)
, где n - это ваше заданное количество узлов.
Кстати, короткий ответ h < 2log(n) + 2