Ближайший общий предок



Дано корневое дерево
Необходимо найти самого низкого общего предка для двух вершин

Пусть дерево задано массивом, где pi - предок вершины i и H - максимальная высота дерева. Тогда задача решается за O(H) двумя циклами от вершины к корню.

Асимптотика: O(H).


Листинг C++

// lowest common ancestor
int lca (vector < int > &prev, int &a, int &b)
{
    vector < int > is (prev.size (), 0);

    for (int i = a; i >= 0; i = prev[i])
        is[i] = 1;
    for (int i = b; i >= 0; i = prev[i])
        if (is[i])
            return i;

    return - 1;
}

07.09.2008, 13:56


По всем вопросам обращаться: rumterg@gmail.com