在倍增求 LCA 时,我们会使用数组 f[i][j] 表示 iii 节点第 2j2^j2j 个父节点。然而,如果 2j>deepi2^j>deep_i2j>deepi,不存在这样一个节点。这里细节就会好多,之前我很难弄清。
f[i][j]
有一次发现,我们可以将 f[root][0]f[root][0]f[root][0] 设为 rootrootroot,这样就可以放心的写成 for(int i=20;i>=0;i--),因为无论多么向上,都会找到 rootrootroot,而 rootrootroot 一定是所有节点的公共祖先。
for(int i=20;i>=0;i--)