Ответ 1
Продолжайте удалять листовые узлы с вашего дерева, пока вы не останетесь с одним node (если осталось с двумя узлами, удалите любой из них). Это node минимизирует максимальное расстояние от него до всех остальных node.
Пример:
* *
/ \ \
* * * *
\ \ \
* => * => * => *
\ \
* *
\
*
Чтобы реализовать это в линейном времени, вставьте все начальные узлы листа в очередь FIFO. Для каждого node также хранится количество его детей. При удалении элемента из очереди уменьшите родительское число дочерних элементов. Если это число становится равным нулю, вставьте родителя в очередь.