家族树:1 是祖辈,边为 1—2、1—3、2—4。标准骨架应写 if (v == fa) continue;(跳过爸爸)。小睿把它写反了:
void dfs(int u, int fa) {
for (int v : g[u]) {
if (v != fa) continue; // 条件写反了
dfs(v, u);
}
}
从根调用 dfs(1, 0) 后,程序的行为是( )。
- A. 照样遍历整棵树,只是多花一点时间
- B. 在树上来回横跳,死循环直到爆栈
- C. 只访问每个点的孩子、跳过爸爸,遍历结果恰好正确
- D. 每个点的邻居几乎都不是爸爸、全被 continue 拦下,一个递归都发不出去——实际上除根外什么都没访问