簡體   English   中英

在線性時間內找到樹中所有節點的最大距離

[英]Find the maximum distance for all nodes in a tree in linear time

將節點的最大距離定義為該節點與樹中所有其他節點之間的最大距離。 我的問題是找到並打印樹內所有節點的最大距離(不一定是二進制或任何東西)。 基本上,對於每個節點,我需要打印出該節點與我們正在查看的節點以及樹中任何其他節點之間的最大距離。 運行時間應為O(n)。

我最好的方法都需要O(N ^ 2)的時間,我不確定該問題還有什么其他地方。 我目前在樹中的每個節點上運行BFS,以找到樹中每個節點的最大距離,但是我認為更好的方法可能是使用某種形式的動態編程。 我不確定。

感謝您的任何幫助。

讓我們選擇一個任意節點作為根。 現在我們有了一棵有根的樹。

在子樹中找到最遠的節點很簡單:它只是最高的葉子(針對子樹中最遠的節點的子樹動態編程將起作用)。

但是,如果它不在子樹中怎么辦? 它根本不可能發生,因此我們有答案。 假設我們要去它的孩子。 我們需要考慮除該根以外的所有根子樹中最遠的葉子。 天真地迭代所有子級在最壞的情況下會給n ^ 2時間帶來復雜性。 但是我們可以通過存儲兩個最佳子代找到固定子代之外的最佳子代。 我們可以對其他任何節點執行相同的操作,因此它可以在線性時間內工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM