Итак, я пытался реализовать алгоритм с наименьшим общим предком. Я просмотрел множество различных алгоритмов (в основном варианты решения Траяна или варианты RMQ).
Я использую недвоичное дерево. Мое дерево часто меняется между запросами, и поэтому предварительная обработка не обязательно будет иметь смысл. В дереве не должно быть более 50-75 узлов. Мне интересно, стоит ли мне беспокоиться об использовании их алгоритмов или просто придерживаться своих собственных.
Мой алгоритм
myLCA(node1, node2) {
parentNode := [ ]
while (node1!=NULL) {
parentNode.push(node1)
node1 := node1.parent
}
while (node2!=NULL) {
for i in parentNode.size {
if (parentNode(i) == node2) {
return node2;
}
}
node2 := node2.parent
}
}