下面这段朴素做法想求 ,但没有先把两个点抬到同一深度。
int lca(int u, int v) {
while (u != v) { u = fa[u]; v = fa[v]; }
return u;
}
以 为根、边为 、、、 的树为例,调用 lca(5, 3) 时这段代码会出错。必须先对齐深度的原因是( )。
- A. 深度不同时不能直接比较两个节点是否相同,只有同一深度的点才能用
==判断 - B. 两边到 LCA 的步数分别是 与 ,只有深度相同时这两段步数才相等,同时上跳才能恰好同时落到 LCA;深度不同时两边错开,会一起越过 LCA
- C. 先对齐能把单次询问的复杂度从 降到
- D. 只是为了少走几步;不对齐也会在 LCA 处相遇,答案一样