Para encontrar um vértice de distância máxima de qualquer folha, você pode realizar uma pesquisa abrangente a partir de muitos pontos de partida, como as folhas. Como um BFS visita cada nó pelo caminho mais curto possível a partir da (s) fonte (s) da pesquisa, podemos atribuir facilmente a cada nó a distância até a folha mais próxima.
Inserir em uma fila uma coleção de pares ( ℓ , 0 ) para ℓ abrangendo todas as folhas e registrando max =0.
Repita o seguinte até que a fila esteja vazia:
Estale um par ( v , d)fora da fila. E sed= maxinserir v em uma coleção de elementos de distância máxima.
Se houver nós adjacentes a v que não foram visitados, empurre um par ( w , d+ 1 ) na fila para cada vizinho W, marcando-os como tendo sido visitados. Se houver algumW esvazie a coleção de elementos de distância máxima (se não estiver vazia) e defina max =d+ 1.
O resultado é uma coleção de nós que estão todos à distância pelo menos max de qualquer folha.
Deixei n = | V| (Observe que m = | E| =n-1) Supondo que possamos preencher a fila com as folhas da árvore a tempoO ( n )examinando todos os nós do gráfico e que os vértices têm listas de adjacência de seus vizinhos, "atravessamos" cada aresta duas vezes para considerar os vizinhos de cada vértice; então esse algoritmo levaO ( n + m ) = O ( n )Tempo. Também funciona para não-árvores, recuperando novamenteO ( n + m ) Tempo.