Để tìm một đỉnh có khoảng cách tối đa từ bất kỳ chiếc lá nào, bạn có thể thực hiện tìm kiếm đầu tiên theo chiều rộng bắt đầu từ nhiều điểm bắt đầu, tức là các lá. Vì BFS truy cập mỗi nút theo đường dẫn ngắn nhất có thể từ (các) nguồn tìm kiếm, chúng tôi có thể dễ dàng gán cho mỗi nút khoảng cách đến lá gần nhất.
Chèn vào hàng đợi một tập hợp các cặp cho nằm trên tất cả các lá và ghi .(ℓ,0)ℓmax=0
Lặp lại như sau cho đến khi hàng đợi trống:
Pop một cặp ra khỏi hàng đợi. Nếu , hãy chèn vào tập hợp các phần tử khoảng cách tối đa.(v,d)d=maxv
Nếu có nút liền kề với chưa được truy cập, đẩy một cặp vào hàng đợi cho mỗi người hàng xóm như , đánh dấu chúng là đã được truy cập. Nếu có bất kỳ nào như vậy , hãy làm trống bộ sưu tập các phần tử khoảng cách tối đa (nếu nó không trống) và đặt .v(w,d+1)wwmax=d+1
Kết quả là một tập hợp các nút nằm ở khoảng cách ít nhất từ bất kỳ lá nào.max
Đặt(lưu ý rằng ). Giả sử rằng chúng ta có thể tạo ra hàng đợi với các lá của cây trong thời gian bằng cách kiểm tra tất cả các nút của biểu đồ và các đỉnh có danh sách kề của hàng xóm của chúng, chúng ta "duyệt" mỗi cạnh hai lần để xem xét các hàng xóm của từng đỉnh; thì thuật toán này mất thời gian . Nó cũng hoạt động cho các cây không, lấy lại thời gian .n=|V|m=|E|=n−1O(n)O(n+m)=O(n)O(n+m)