在考虑写一个函数来实现它之前,我试着想一个算法。 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