在考慮寫一個函數來實現它之前,我試着想一個算法。 h被表示爲主父節點與給定節點之間的最大距離。它應該運行在o(h^2)這意味着它應該更容易提出這樣一個算法,但我經常發現自己與o(h)算法。當談到了解我是否真的在做h^2操作時,我也感到困惑。我真的可以用鉛。尋找最少在二叉樹中的共同祖先o(h^2)換一個
1
A
回答
2
最簡單的LCA算法將在O(h^2)
中運行 - 創建兩個嵌套循環,一個運行在第一個頂點的所有祖先上,另一個運行在第二個頂點的所有祖先上,並在循環內部比較它們。
a1 = a // a is the first given vertes
while a1 != nil // assume root's parent is nil
a2 = b // b is the second given vertex
while a2 != nil
if (a1 == a2)
compare with current-best solution
a2 = a2.parent
a1 = a1.parent
因此,從第一個給定的頂點開始,即通過它的所有祖先。對於它的祖先a1
,從第二個給定的頂點到根,並檢查您是否遇到路上的a1
頂點。
相關問題
- 1. 二叉樹的第一個共同祖先
- 2. 如何查找二叉樹中節點的第一個共同祖先?
- 3. 二叉樹的最低公共祖先(不是二叉搜索樹)
- 4. 二叉搜索樹中的最低公共祖先
- 5. 如何找到一棵樹的最低共同祖先?
- 6. 在二叉樹非遞歸版本中最少見的祖先搜索 - Java
- 7. 查找二叉搜索樹中兩個節點的最低共同祖先 - 高效
- 8. 尋找一個.NET二叉樹
- 9. 從祖先矩陣創建二叉樹
- 10. 二叉樹中的最低公共祖先,閱讀輸入和算法
- 11. python最低共同祖先
- 12. 二叉樹:非遞歸例程打印二叉樹節點的祖先?
- 13. 尋找二叉樹的價值在Haskell
- 14. 在二叉樹中尋找同構性的算法
- 15. 查找兩個Git分支的最新共同祖先
- 16. 在neo4j中查找最低共同祖先(LCA)
- 17. 在Ada的二叉樹中尋找樹葉
- 18. Neo4j的最低共同祖先
- 19. 序言 - 找到一個二叉樹的最大總和子樹
- 20. 使用.NET反射找到一個共同的祖先類
- 21. O(log n)中的二叉搜索樹?
- 22. 二叉樹中最大的二叉樹搜索樹
- 23. 更多本地化,高效最低公共祖先算法給出多個二叉樹?
- 24. 從一組xpath中找到共同的祖先?
- 25. 證明具有n個元素的二叉樹堆中的二叉樹數量最多爲O(log n)
- 26. Python找到二叉樹中兩個節點的最低公共祖先(如果不是樹中所有這些節點)
- 27. 在C++中尋找二叉樹的實現
- 28. 查找二叉樹的最大深度
- 29. 查找二叉樹的最深節點
- 30. 找到最小遞歸的二叉樹
爲什麼你想要一個較慢的算法?如果你想要一個二次時間算法,爲什麼不運行線性時間算法,然後忙碌循環h?2步? – user2357112
我被要求了。我想對它有一個完整的理論上的理解。 – Meitar