如果兩個節點和樹的根都給我。如何找到兩個節點的共同祖先?找到給定的兩個節點的共同祖先的算法
0
A
回答
0
你可以按照這個方法
雖然從上遍歷二叉搜索樹底部的節點n我們與N1和N2之間,即價值遭遇,N1 <ñ< N2是最低或最小公共祖先(LCA)n1和n2(其中n1 < n2)。因此,只需按照預定順序遍歷BST,如果找到值介於n1和n2之間的節點,那麼n是LCA,如果它的值大於n1和n2,則我們的LCA位於節點的左側,if它的價值比n1和n2都小,然後LCA位於右側。
其在面試中常見的編程問題,你可以很容易地找到了自己的解決方案上interview sites
0
你好這裏是一個Python實現,我發現有用的LCA: -
class BST(object):
def __init__(self, val=None, right=None, left=None):
self.val = val
self.right = right
self.left = left
return None
def __nonzero__(self):
return self.val is not None
def insert(self, item):
if not self:
self.val = item
elif item < self.val:
if self.left:
return self.left.insert(item)
else:
self.left = BST(val=item)
elif item > self.val:
if self.right:
return self.right.insert(item)
else:
self.right = BST(val=item)
return None
def lca(self, m, n):
if n < self.val:
return self.left.lca(m, n)
elif m > self.val:
return self.right.lca(m, n)
else:
return self.val
if __name__ == "__main__":
b = BST()
for k in [8, 3, 10, 1, 6, 14, 4, 7, 13]:
b.insert(k)
for pair in [(4, 7), (4, 10), (1, 4), (1, 3), (3, 6)]:
print b.lca(*pair)
相關問題
- 1. 找到兩個以上分支的共同祖先
- 2. Neo4j最低共同祖先節點未找到
- 3. 給定節點對的最低公共祖先
- 4. 查找兩個Git分支的最新共同祖先
- 5. 查找鄰接列表中兩個節點的最低公共祖先
- 6. 兩節點之間的祖先
- 7. 如何查找二叉樹中節點的第一個共同祖先?
- 8. 查找XML節點集的最低公共祖先
- 9. 使用.NET反射找到一個共同的祖先類
- 10. domXpath得到祖先節點
- 11. Tarjan的最不共同的祖先算法解釋
- 12. 查找二叉搜索樹中兩個節點的最低共同祖先 - 高效
- 13. 在neo4j中通過java查找給定兩個節點的公共節點
- 14. XPATH:計算祖先節點中的先前元素
- 15. 我如何找到共同的祖先來rebase?
- 16. 從一組xpath中找到共同的祖先?
- 17. 如何找到一棵樹的最低共同祖先?
- 18. XSLT for循環並找到具有最多祖先的節點
- 19. 如何使用XPath找到一個祖先或自身的最近的祖先節點列表
- 20. 如何以編程方式查找兩個分支的共同祖先
- 21. 有沒有更好的方法找到最低的共同祖先?
- 22. 找到所有懸掛與給定的祖先提交 - Git的
- 23. python最低共同祖先
- 24. 泰坦圖中的共同祖先..
- 25. 沒有共同祖先的分支
- 26. Neo4j的最低共同祖先
- 27. 隔離特定節點和祖先
- 28. 如何通過祖先,父節點和子節點找到更復雜的特定節點
- 29. jQuery中最近的祖先節點
- 30. 獲取祖先節點+的XQuery-SQL
的可能的複製HTTP:/ /stackoverflow.com/questions/1484473/how-to-find-the-lowest-common-ancestor-of-two-nodes-in-any-binary-tree – lurker
請看這裏:http://stackoverflow.com/questions/ 1484473 /如何找到的最最低的共祖先的兩節點集羣中,任何二進制樹 – fen