Tôi có một cây vô hướng có đỉnh mà tôi muốn dán nhãn. Các nút lá nên được dán nhãn một. Sau đó, giả sử những chiếc lá đã được gỡ bỏ. Trong cây còn lại, lá nên được dán nhãn hai. Quá trình này tiếp tục theo cách rõ ràng cho đến khi tất cả các đỉnh có nhãn. Lý do tôi làm điều này là vì tôi muốn lưu trữ các đỉnh trong một hàng đợi và đi qua chúng "lá đầu tiên". Có cách nào dễ dàng để thực hiện thời gian này không?
Tôi có thể giải quyết vấn đề bằng cách thực hiện BFS trên mỗi bước. Nhưng trong trường hợp xấu nhất, trên mỗi bước tôi đi qua mọi đỉnh, loại bỏ chính xác hai lá và chinh phục chúng. Tôi tin rằng điều này cần thời gian bậc hai.
Một ý tưởng khác là đầu tiên tìm thấy tất cả các lá, và sau đó thực hiện BFS từ mỗi lá. Điều này không cho tôi giải pháp mong muốn. Ví dụ, hãy xem xét một loại "biểu đồ vương miện" như trong hình dưới đây. Giải pháp mong muốn được hiển thị, nhưng khởi chạy BFS từ mỗi lá sẽ chỉ dẫn đến hai nhãn được sử dụng.
Lý tưởng nhất, thuật toán thời gian tuyến tính cũng sẽ dễ dàng để giải thích và thực hiện.