そのため、私は最も低い共通祖先アルゴリズムの実装を検討してきました。私は多くの異なるアルゴリズム(主に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
}
}