least-common-ancestor相关内容

范围最小查询方法(从树到受限 RMQ)

所以,我阅读了this 关于 RMQ(范围最小查询)的 TopCoder 教程,我有一个大问题. 在他介绍 方法,到目前为止我能理解的是: (整个方法实际上使用了稀疏表 (ST) 算法,从 LCA 减少到 RMQ,以及 从 RMQ 到 LCA) 给定一个数组 A[N],我们需要将它转换为笛卡尔树,从而使 RMQ 问题成为 LCA(最低公共祖先)问题.稍后,我们可以得到数组 A 的 ..
发布时间:2022-01-05 18:41:36 其他开发

如何在任何二叉树中找到两个节点的最低公共祖先?

这里的二叉树不一定是二叉搜索树. 结构可以作为 - 结构节点{整数数据;结构节点 *left;结构节点*右;}; 我能和朋友一起想出的最大解决方案是这样的 - 考虑这个二叉树: 中序遍历产生 - 8, 4, 9, 2, 5, 1, 6, 3, 7 后序遍历产生 - 8, 9, 4, 5, 2, 6, 7, 3, 1 因此,例如,如果我们想找到节点 8 和 5 的共同祖先, ..

如何表示非二叉树,以及如何在该树上执行LCA?

通常如何表示非二叉树?节点可以拥有的子代数没有限制的树。最好是使用邻接矩阵或邻接列表,只是假设没有循环,或者执行类似此问题的操作-> 如何实现非二叉树 ,然后跟进一个问题,当您有一棵n元树时(这是它们的正确名称吗?)找到树中两个给定节点/数据值的最小公祖的好方法是什么?我所能找到的是处理二进制树的算法,例如这样的-> 静态节点lca(节点根,int v1 ,int v2) { ..
发布时间:2020-06-03 20:40:47 其他开发

范围最小查询< O(n),O(1)>方法(从树到受限RMQ)

所以,我读了此关于RMQ(范围最小查询)的TopCoder教程,我遇到了一个大问题。 在他介绍方法,直到现在我仍然可以理解: (整个方法实际上使用了稀疏表(ST)算法, R从LCA到RMQ ,并且从RMQ到LCA ) 给定数组A [N],我们需要将其转换为笛卡尔树,从而使RMQ问题LCA(最低公共祖先)问题。稍后,我们可以获得数组A的简化版本,并将其作为受限的RMQ问题。 ..
发布时间:2020-06-03 20:04:31 其他开发

二叉树非递归版本中最少的共同祖先搜索 - Java

我正在搜索一个非递归算法版本,用于在用Java编写的已排序二进制树中查找最不常见的祖先。 我找到的所有内容都只是递归版本(即使是在stackoverflow和其他网站上)。 有人可以写或指导我到非递归版本(使用while循环)? 如果这个版本在时间复杂度方面效率更高,还可以写一下吗? 解决方案 碰巧看到这个早已被遗忘问题。 如果给你一棵树,你的意思是: A BC ..
发布时间:2019-01-09 20:02:42 Java开发

寻找两个叶节点的最佳共同祖先,其中节点具有零个,一个或两个父母

我正在寻找一种算法来查找图的最佳共同祖先,其中图中的节点可以具有零,一个或两个父母。我不确定“最佳共同祖先”的术语:更好的术语可能是“最低的共同祖先”或“最近的共同祖先”等。如果有更好的术语,请提供描述这些的术语。 该算法可以访问完整的图形数据结构。 给定节点可能有零个,一个或两个父母。这很关键,因为我在网络上看到的算法假定给定节点有零个或一个父母,但不是两个父母(请参阅下面的参考资料 ..
发布时间:2018-05-25 17:26:57 其他开发

什么是最低的共同祖先算法的实际应用?

我在看看在哪里这样的LCA常用算法? 解决方案 在编译器中,两个基本模块的LCA是,你可以把一个计算,以使其适用于这两个地方。这可能是用于消除共同SUBEX pressions,或对于SSA转换插入披节点是有用的。这些算法以及进化和高度优化的,不过,这样的LCA本身可能很难看到,例如, SSA 和 pre ..
发布时间:2015-11-30 21:01:21 C/C++

如何找到的节点的第一共同祖先在二叉树?

以下是我的算法来找到共同祖先。但我不知道如何计算它的时间复杂性,任何人都可以帮忙吗? 公共树commonAncestor(树根,树磷,树Q){ 如果(封面(root.left页)及&安培;盖(root.left,Q)) 返回commonAncestor(root.left,P,Q); 如果(封面(root.right页)及&安培;盖(root.right,Q)) ..
发布时间:2015-11-30 20:41:45 C/C++

范围最小查询&LT;为O(n),O(1)&GT;方法(从一棵树到受限制的RMQ)

所以,我读在那里,他引进了(整个逼近实际使用的方法在给定一个数组A [N],我们需要将其转换为笛卡尔树,从而使一个RMQ问题的一个LCA(最低公共祖先)的问题。后来,我们可以得到数组A的简化版本,并使它成为一个受限制的RMQ问题。 因此​​,它基本上是两个变换。因此,第一个RMQ到LCA部分是简单的。通过使用栈,我们可以转换为O(n)的时间,导致数组T [N],其中T [i]为i的元素的父。和树 ..
发布时间:2015-11-30 16:07:47 C/C++

最低的共同祖先算法

所以,我一直在寻找到实现最低的共同祖先算法。我看了很多不同的算法(图拉真解决方案,主要或变化的RMQ的变化)。 我使用的非二进制树。我的树会经常查询之间改变,因此pre-处理不一定是值得的。树不应该超过50-75节点。我想知道是否是我应该懒得用自己的算法或只是坚持我自己的。 我的算法 myLC​​A(节点,节点2){ parentNode:= [] 而(节点!= NULL) ..
发布时间:2015-11-30 14:59:33 C/C++