下面的代码想求每个节点的子树大小,sz 是全为 的全局数组,对以 为根的树调用 dfs(1, 0)。
void dfs(int u, int fa) {
sz[u] = 1;
for (int v : adj[u]) {
if (v == fa) continue;
sz[u] += sz[v];
dfs(v, u);
}
}
对以 为根的链 (边为 、)运行后,结果是( )。
- A. 结果正确:加法满足交换律,先加子节点还是后加子节点都一样
- B. 得到 、、:累加时子节点的 还停在初值
- C. 只有 算错, 与 仍然正确
- D. 会无限递归,因为
v == fa的判断已经失效