Предполагая, что дерево, с которого вы начинаете, является полным деревом, я бы посмотрел, можете ли вы отслеживать высоту каждого узла.
Затем, когда вы выполняете итерацию по дереву в поисках следующего дочернего элемента для удалениявы делаете проверку на каждом узле.Если Lh> Rh, идите налево, иначе - направо.Единственное предостережение, которое я имею в связи с этой идеей, заключается в том, что когда вы берете этот узел, вам необходимо обновить все высоты.Которые добавляют стоимость O (log n).Но так как вы пересекаете дерево, которое является тэтой (log n), это не слишком большая асимптотическая сделка.