无限二叉树上的距离:对齐深度¶
出题人解法,见配套讲解。Codex(GPT-6):使用整数求深度并补齐证明。程序 alternative.cpp 是较大编号上移的补充方案,通过完整正式数据。
反复除以二直到到达根,可以求出顶点深度。先让较深的端点向上移动,直到两端深度相同,累计这段深度差;随后每轮同时把两个端点移到父亲,答案加二,直到重合。
最近公共祖先不可能深于任何一个端点,所以对齐阶段不会越过它。在同一深度上,若两个顶点不同,则最近公共祖先必定更浅,两端都可以沿最短路上移。相遇时正好到达最近公共祖先,累计移动次数正确。
用 \(U\) 表示最大编号,\(H=\lfloor\log_2U\rfloor\) .求深度和上移都使用 \(O(H+1)\) 时间,每次询问额外空间 \(O(1)\) ,总时间 \(O(m(H+1))\) .全程用整数计算;编号相等、一个端点为另一个的祖先及根节点均自然包含。
本方法显式展示“对齐,再同步上移”的结构;直接比较编号的方法省去单独求深度,两者在本题都只需常数存储。