- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有这段代码可以在二叉树
中找到两个节点
的least common Ancestor
。我认为时间复杂度是 O(log n)
。但需要专家意见。这段代码在我的输入上运行良好,但我不确定我是否对它进行了详尽的测试。
这是代码
//LCA of Binary tree
public static Node LCABT(Node root, int v1, int v2){
if (root==null)
return null;
if (root.data==v1 || root.data==v2){
return root;
}
Node left = LCABT(root.left,v1,v2);
Node right = LCABT(root.right,v1,v2);
if(left!=null && right!=null)
return root;
else if (left!=null)
return left;
else return right;
}
最佳答案
你的代码的时间复杂度是O(n)
,因为你正在遍历整棵树,即你正在访问它的所有节点。但是,如果您没有 BST,而只有一棵二叉树,那么这是您在父节点上没有指针的情况下可以实现的最好结果(在这种情况下,构建从两个节点到根节点的路径并返回一个节点是在两条路径中)。如果你有 BST,那么你可以定位两个节点并在 O(h)
中找到最小公共(public)祖先,其中 h 是树的高度,即 O(log n)
如果树是平衡的。
最后的评论 - 如果您正在准备比赛或面试,请确保处理极端情况。您的代码不处理其中一个节点不包含在树中的情况。
关于java - 此处用 Java 实现的二叉树中 LCA 的时间复杂度是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21423444/
考虑如下定义的无限二叉树。 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
我是一名优秀的程序员,十分优秀!