Кратчайшее расстояние в дереве



Дано корневое дерево
Необходимо найти кратчайшее расстояние между парой вершин

Решением является сумма расстояний от этих вершин до их LCA.

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


Листинг C++

// least distance in a tree
int ldt (vector < int > &prev, int &a, int &b)
{
    int d1 = 0;
    int d2 = 0;
    vector < int > is (prev.size (), 0);

    for (int i = a; i >= 0; i = prev[i])
        is[i] = ++ d1;
    for (int i = b; i >= 0; i = prev[i], ++ d2)
        if (is[i])
            return is[i] + d2 - 1;

    return - 1;
}

07.09.2008, 14:00


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