我知道以前有類似的問題,但我認爲我的解決方案要簡單得多。特別是與Wikipedia相比。有沒有更好的方法找到最低的共同祖先?
請證明我的看法!
如果你有一個包含了給定數據結構的節點樹:
struct node
{
node * left;
node * right;
node * parent;
int key;
}
你可以寫這樣的功能:
node* LCA(node* m, node* n)
{
// determine which of the nodes is the leftmost
node* left = null;
node* right = null;
if (m->key < n->key)
{
left = m;
right = n;
}
else
{
left = n;
right = m;
}
// start at the leftmost of the two nodes,
// keep moving up the tree until the parent is greater than the right key
while (left->parent && left->parent->key < right->key)
{
left = left->parent;
}
return left;
}
這段代碼非常簡單,最糟糕的情況是O (n),平均情況下它可能是O(logn),特別是如果樹是平衡的(其中n是樹中節點的數量)。
感謝您的解釋! – theninjagreg 2012-07-10 07:07:43