檢查2樹節點是相關的(即祖先子孫)檢查2樹節點在O相關(祖先/後代)(1)用前處理
- 解決它在O(1)時間,與O(N)的空間(N =節點#)
- 預處理允許
就是這樣。我將在下面討論我的解決方案(方法)。如果你想先想好自己,請停止。
對於前處理,我決定做一個預購(遞歸通過根先走,然後兒童),給一個標籤到每個節點。
讓我詳細解釋標籤。每個標籤由逗號分隔的自然數組成,如「1,2,1,4,5」 - 該序列的長度等於(節點的深度+1)。例如。根的標籤是「1」,根的孩子將有標籤「1,1」,「1,2」,「1,3」等。下一級節點將有標籤,如「1,1,1」 ,「1,1,2」,...,「1,2,1」,「1,2,2」,...
假設節點的「訂單號」是「該節點的基於1的索引」在其父項的子項目列表中。
常用規則:節點的標籤由其父標籤後跟逗號和「訂單號」組成。因此,爲了回答O(1)中兩個節點是否相關(即祖先 - 後代),我將檢查其中一個標籤的標籤是否爲其他標籤的「」前綴「。雖然我不確定這些標籤是否可以被認爲佔用O(N)空間。
任何批評者都有修正或替代方法。
這是在最壞的情況下每個節點都有一個孩子(麪條)的O(N^2)空間。 – WeaselFox 2012-04-25 07:09:25