求每个点的子树大小,两种写法:
int dfs1(int u) {
int s = 1;
for (int v : ch[u]) s += dfs1(v);
return s; // 返回值型
}
void dfs2(int u) {
sz[u] = 1;
for (int v : ch[u]) { dfs2(v); sz[u] += sz[v]; } // 全局数组型
}
下面说法正确的是( )。
- A. 返回值型更快,因为它不需要数组
- B. 全局数组型无法正确计算子树大小
- C. 两种等价:返回值通过
return交给父亲,全局数组型把结果写进数组再让父亲读取;都以后序回溯为前提 - D. 返回值型不能处理带权树