在Python中實現最低共同祖先最簡單的方法是什麼?我有一棵樹,每個節點都有一個指向父節點的指針,我希望能夠找到給定兩個節點的第一個共同祖先。我想出了一些想法,但沒有特別吸引python最低共同祖先
讓每個節點包含其基地的名單,並進行聯接,發現最長的公共前綴,然後把最後一個元素。不幸的是,我不知道任何內置的方法來做最長的通用前綴,所以這需要手動循環。
讓每個節點都包含一組基,並執行一組交集,並取最大元素。但是這需要定義自定義比較運算符,我甚至不確定它是否可行。
我該怎麼辦?我正在尋找一些有利於簡化性能的解決方案,因此需要複雜處理的解決方案已經無法使用。
編輯:我發現,雖然沒有內置的方式,你可以使用zip在一行中做最長的通用前綴,所以它仍然相當簡單。
common = [x for x in zip(*baselists) if len(set(x)) == 1][-1]
如果您可以在不修改樹本身的情況下計算深度不得不。只需使用遞歸函數或迭代節點的祖先即可。 – 2012-08-10 17:34:51