所以我一直在研究实现最低共同祖先算法。我查看了许多不同的算法(主要是 Trajan 解决方案的变体或 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
}
}