原文:树上两点的最近公共祖先问题(Least Common Ancestors)

概念: 对于有根树T的两个节点u,v,最近公共祖先LCA T, u, v 表示一个节点 x, 满足 x 是 u , v 的祖先且 x 的深度尽可能的大.即从 u 到 v 的路径一定经过点 x. 算法: 解决LCA问题比较经典的是Tarjan LCA 离线算法,还有另外一种方法,是经过一系列处理将LCA问题转化为和数据结构有关的RMQ问题加以解决.这里只阐述下Tarjan LCA 算法. Tarja ...

2016-08-13 14:05 0 1455 推荐指数:

查看详情

最近树上公共祖先详细图解

一、定义 LCA(Least Common Ancestors),树上最近公共祖先,顾名思义,也就是说,对于节点u,v,设x=lca(u,v),则,u和v均在x的子树中,并且x的深度最小。 图画得太丑了 如这幅图中:lca(5,6)=2 ,lca(6,3)=1 ,lca(3,9 ...

Sun Aug 04 05:54:00 CST 2019 1 430
最近公共祖先

钱菜鸡水平不行,只能写写最近公共祖先了。 目前 OI 所流行的 \(O(nlogn) - O(1)\) 的 LCA 算法是 欧拉序 + RMQ,显然,欧拉序没有这么好写,而且常数不小(序列长度倍),所以导致了很多情况下更多人选择了倍增等算法。 欧拉序+RMQ 算法中,我们要实现一个 \(2n ...

Wed Jan 29 21:55:00 CST 2020 2 992
最近公共祖先

最近公共祖先(\(\rm Least\,Common\,Ancestors\)),简记为 \(\rm LCA\)。顾名思义就是一棵树中的某个节点的公共祖先中离他们最近,即深度最大的那个。 举个例子: 上图中 \(8\) 和 \(6\) 的 LCA 就是 \(1\)。 那么怎么求 LCA ...

Sun Aug 08 02:03:00 CST 2021 0 194
最近公共祖先

leetcode 美团笔试也考到了就是要找二叉树个节点的第一个共同的祖先。对于树,没有规定,不一定是一颗二叉查找树。 第一种情况:首先 如果这个树是一个二叉树的,并且是一颗二叉查找树的话 由于二叉查找树的左子树节点比父节点小,右子树节点比父节点大,则输入个节点,只用从根节点开始比较 ...

Thu Mar 30 20:09:00 CST 2017 0 2737
LCA 最近公共祖先

说,就是个点在这棵树上距离最近公共祖先节点。     所以LCA主要是用来处理当仅有唯一一 ...

Sat Mar 25 04:56:00 CST 2017 6 6484
二叉树中个节点的最近公共祖先

一、递归版本 思想:假设根结点为root,其中给定的个结点分别为A和B,它们分别都不为null。如果当前结点p为null,那么直接返回null,如果当前结点p是给定的结点中的其中一个结点,那么直接返回当前结点p(如果p是根结点,程序一次就返回了,下面的递归也不会出现)。如果当前节点不是A和B中 ...

Thu Aug 16 22:56:00 CST 2018 0 7429
PTA 7-5 有趣的最近公共祖先问题 (30分)

题目描述: 给出一颗二叉树的后序遍历和中序遍历,你能计算出个结点的最近公共祖先吗? 输入格式: 第一行给出个整数N(N<=10000)和M(M<=10000),分别代表二叉树的结点数和我们接下来的询问数。 第二行和第三行分别给出N ...

Sun Aug 02 04:53:00 CST 2020 0 741
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM