一、 LCA问题的简介
LCA问题(Least Common Ancestors,最近公共祖先问题),是指给定一棵有根树T,给出若干个查询LCA(u, v)(通常查询数量较大),每次求树T中两个顶点x和y的最近公共祖先。
询问:LCA(x, y),即求x与y的最近公共祖先。
题目描述:通常是先给定一棵有根树,然后询问(两种询问方式,下文会提及)。
二、LCA题目的分类
在线算法:你问我一次,我立马回答你。
离线算法:等你问完了,我再一次性回答你。
三、LCA问题的解法
图1
以下以图1为例,分别对两个分类的算法作相应的讲解:
1. 离线算法——Tarjan(后序DFS+并查集)
【算法步骤】
a. 后序遍历访问树(假设现在访问到结点x并且x不是叶子)<