Ну тогда так, берем все листья, делаем для них то, что я сказал, запоминаем обойденные ноды. Потом берем оставшиеся ноды и делаем с ними то же самое. Если нод много, то можно сэкономить и при следующей итерации не пересчитывать промежуточные ноды, если они уже посчитаны на предыдущей.
Если какие то ноды остались не посещёнными, то это же вроде уже не дерево