Пусть H
будет высотой вашего дерева, и пусть k
будет количеством чисел в ваших входных данных.
Если вы начнете нумерацию узлов с 1 и запишите двоичные числа узлов, это будет Стало ясно, что номер каждого узла является префиксом номеров всех его дочерних элементов. Итак, чтобы найти наименьшего общего предка, вы должны найти наибольший общий префикс (GCP) двоичных чисел.
Let min
и max
быть минимальными и максимальными числами в вашем подмножестве. Если числа в вашем входе уже отсортированы, вы можете найти min
и max
в O(1)
. Если они не отсортированы, вы можете найти min
и max
в O(k * H)
.
GCP всех двоичных чисел - это GCP min
и max
- вы можете найти его тривиально в O(H)
.
Этот алгоритм работает в O(H)
, если числа отсортированы, и в O(k * H)
в противном случае (хотя ваш алгоритм работает и в O(k * H)
, если вы правильно его реализуете).