Самый низкий общий предок может быть определен в качестве единственного узла в дереве, которое удовлетворяет двум условиям:
A. все целевые узлы являются либо этот узел или decendent этого узла и Б. нет дети этого узла удовлетворяют условию A
Итак, вы ищете узел, где условие A истинно для узла, но ни один из его дочерних элементов. Мы знаем, что корневой узел удовлетворяет условию A (по определению). Таким образом, алгоритм выглядит следующим образом, начиная с корнем:
- , если этот узел находится в целевом списке, то она является LCA
- иначе искать ребенок для узлов, удовлетворяющих условию А,
- для любого удовлетворения, начала снова на шаге 1 для этого ребенка
- , если никто не удовлетворяет, то у вас есть наименьший общий предок
Этот алгоритм будет работать для любого числа целей, а не только 2, как и в вашем вопросе.
Я знаю, что вам не нужен код, но я рекомендую вам взглянуть на использование потоков Java 8 для этого: они довольно элегантны для такого типа ситуаций, в которых вы выполняете итерацию через детей, ища условия, которые должны быть выполнены.
Есть ли шанс взять LCM 20 и 52 ?? только последовательные узлы? – Prashant