- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道这个问题已经被问过很多次了。我需要对二叉树(不是 BST)的 LCA 进行一些澄清。如果我试图从给定的树中找到两个节点(3,11)的 LCA:
_______1______
/ \
___2__ ___4__
/ \ / \
6 5 9 11
/ \
7 3
代码对于 (3,11) 返回 11。
// Binary Tree LCA not BST
private Node findLowestCommonAncestor(Node root, int value1, int value2) {
Node leftLCA = null;
Node rightLCA = null;
if (root == null) {
return null;
}
else {
int value = root.item;
if (value == value1 || value == value2) {
return root;
}
else {
leftLCA = findLowestCommonAncestor(root.left, value1, value2);
rightLCA = findLowestCommonAncestor(root.right, value1, value2);
if (leftLCA != null && rightLCA != null) {
return root;
}
return (leftLCA != null) ? leftLCA : rightLCA;
}
}
}
这里我很困惑,应该是4吧。如果我错了,请纠正我。我在这里感到困惑吗?或者这是 LCA 的工作原理吗?
最佳答案
11
是您所显示的树中 (3, 11)
的正确 LCA。
我认为您可能忽略了 the definition of LCA 中的一点其中元素被视为自身的后代:
...the lowest common ancestor (LCA) of two nodes v and w in a tree or directed acyclic graph (DAG) is the lowest (i.e. deepest) node that has both v and w as descendants, where we define each node to be a descendant of itself (so if v has a direct connection from w, w is the lowest common ancestor).
(强调我的)
由于 3
是 11
的子级,因此 LCA 是 11
。
关于java - 二叉树的 LCA - 需要一些建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33089861/
考虑如下定义的无限二叉树。 For a node labelled v, let its left child be denoted 2*v and its right child 2*v+1. Th
我正在尝试获取树中两个节点的最不共同祖先。我已经尝试过,但问题是如果一个节点是其他节点的后代,我无法获得 LCA。 我尝试解决它,然后它仅适用于后代节点。不知道如何进行。 Node* Tree::LC
我正在阅读 LCA Tutorial 它定义 P[1,N][1,logN] 其中 P[i][j] 是 i 的第 2j 个祖先 为什么使用 logN 和为什么使用 2j 祖先?我不明白它的直觉? 我无法
我正在尝试为无根树实现 LCA。我已经给出了一棵树(一个没有循环的连通无向图)和一系列关于一些根和两个顶点的 LCA 的查询。每个特定的查询都可以有不同的根,所以我不能使用在开始时为任意根预处理树的算
非二叉树通常如何表示?一个节点可以拥有的子节点数量没有限制的树。最好是使用邻接矩阵还是邻接列表,并假设没有循环,或者做类似这个问题的事情 -> How to implement a Non-Binar
我知道这个问题已经被问过很多次了。我需要对二叉树(不是 BST)的 LCA 进行一些澄清。如果我试图从给定的树中找到两个节点(3,11)的 LCA: _______1______ /
最近公共祖先(LCA) 目录 最近公共祖先(LCA) 定义 求法 方法一:
我有一棵树。我想回答以下问题: 在路径上增加值(value) 获取路径上的总和 我正在使用重光分解。树中有 n 个节点和 m 个查询。使用 HLD,当我知道最低公共(public)祖先时,我可以将对
我正在尝试使用 python 中的 networkx 包来查找图中 2 个节点的最低公共(public)祖先。当我为此使用内置方法时,它只会在有多个 LCA 时检索一个。关于如何检索所有 LCA 的任
我有这段代码可以在二叉树中找到两个节点的least common Ancestor。我认为时间复杂度是 O(log n)。但需要专家意见。这段代码在我的输入上运行良好,但我不确定我是否对它进行了详尽的
我使用数组编写了一个非常简单的树类。此类需要表示链接在一起的数据,但它们可以有不同数量的连接(即一条路径可能只有 3 个节点,而另一条路径可能有 10 个)。也就是说,我需要找出一种可能的解决方案来使
我有这段代码,它计算二叉树中给定的两个节点的Least common Ancestor。目前,它假设两个节点都存在。我可以编写一个辅助方法来检查节点是否存在,然后调用 LCABT 方法。那将需要遍历树
我正在使用 PoLCA R 包应用 LCA 分析,但分析三天后没有结果(尚未找到最佳模型),偶尔会出现以下错误:“警报:迭代完成,未找到最大似然” 。所以我在35潜类取消了这个过程。我正在分析 16
我正在使用 PoLCA R 包应用 LCA 分析,但分析三天后没有结果(尚未找到最佳模型),偶尔会出现以下错误:“警报:迭代完成,未找到最大似然” 。所以我在35潜类取消了这个过程。我正在分析 16
我是一名优秀的程序员,十分优秀!