LCA(Lowest Common Ancestor)
向上标记法
对于两个点,从最深的点向上跳,走过的节点进行标记。然后从另一个点向上跳,第一个遇到的就是要求的祖先
时间复杂度 Θ(n)
倍增算法
倍增算法可以分为两个步骤:
- 调整到同等深度
- 两个节点在同等深度同时向上找
存图
采用邻接表存图,并记录根节点
预处理深度
采用BFS获得各个点深度,同时根据深度求解fa[i][j]
。
fa[i][j]
表示第i个点向上找深度为2j高度的父节点编号
代码如下
同步倍增
先同步到同一深度,然后向上攀爬