‹ 上一题 下一题 ›

g7-07712. 朴素跳父法为何先对齐深度 未做

下面这段朴素做法想求 ,但没有先把两个点抬到同一深度。

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 处相遇,答案一样
未选择
输入
输出

            
答案