如果所有元素都不同,它很容易在BST中找到最接近的共同祖先。但是如果某些值相同呢。到目前为止,我们只是比较节点的数据,就是这样,但现在我们需要检查节点的地址而不是数值吗?二叉搜索树中的最低公共祖先
2
A
回答
1
是的,而不是只使用您的key
进行比较,请使用(key, address of node)
进行比较。这在处理非唯一键时简化了代码。
0
没有看到你使用的是什么样的结构,就很难给具体,但你可以尝试这样的东西伪代码:
struct BST {
struct BST* parent;
struct BST* left;
struct BST* right;
void* value;
}
find_common_ancestor(struct BST* x, struct BST* y)
{
set<struct BST*> ancestors;
// Add all of x's ancestors to set.
while (true) {
ancestors.insert(x);
if (x == NULL)
break;
x = x=>parent;
}
// Check y's ancestors against x's until a match is found.
while (true) {
if (ancestors.count(y) > 0)
return y;
y = y->parent;
}
}
0
这里是psudocode。只是将它们转换成语法。
GETLeastCommonAn(BINARYTREE BT, NODE A, NODE B)
IF Root==NIL
return NIL
ENDIF
IF Root==A OR root==B
return Root
ENDIF
Left = GETLCA (Root.Left, A, B)
Right = GETLCA (Root.Right, A, B)
IF Left! = NIL AND Right! = NIL
return root
ELSEIF Left! = NIL
Return Left
ELSE
Return Right
ENDIF
相关问题
- 1. 二叉树的最低公共祖先(不是二叉搜索树)
- 2. 最低公共祖先解释二进制搜索树的代码
- 3. 二叉树中的最低公共祖先,阅读输入和算法
- 4. 查找二叉搜索树中两个节点的最低共同祖先 - 高效
- 5. 最低公共祖先 - 代码说明
- 6. 最低公共祖先(升压图)
- 7. 在二叉树非递归版本中最少见的祖先搜索 - Java
- 8. 二叉树中最大的二叉树搜索树
- 9. python最低共同祖先
- 10. 更多本地化,高效最低公共祖先算法给出多个二叉树?
- 11. 从祖先矩阵创建二叉树
- 12. 二叉树广度优先搜索
- 13. 二叉树到二叉搜索树(BST)
- 14. 二叉树的第一个共同祖先
- 15. 寻找最少在二叉树中的共同祖先o(h^2)换一个
- 16. 二叉搜索树
- 17. 二叉搜索树
- 18. 二叉搜索树
- 19. 二叉搜索树
- 20. 二叉搜索树
- 21. 二叉搜索树
- 22. 二叉搜索树
- 23. 二叉搜索树
- 24. Neo4j的最低共同祖先
- 25. 二叉搜索树Clojure中
- 26. 如何找到一棵树的最低共同祖先?
- 27. 给定节点对的最低公共祖先
- 28. 最低公共祖先算法的实际应用是什么?
- 29. SQL:查找hierarchyids的最低公共祖先
- 30. 查找XML节点集的最低公共祖先
@ swiss:你没有给任何节点的父字段。如果父节点被赋予,那么BST的使用会是什么。 :P –
@arvind mohan:没有什么能阻止BST实现从指向其父节点的指针。诚然,这在技术上并不需要,但它确实使某些事情更容易 - 就像你正在做的事情一样。即使你没有给出父指针,你也可以走树来创建一个包含x和y祖先的集合;你可以在while循环中使用它而不是父指针。 – Swiss