如何获取每个节点的子树大小?

时间:2016-08-15 17:51:33

标签: c++ vector tree

我有一棵树,我想在每个节点找到子树。我尝试了以下代码 阅读

             scanf("%d %d", &n,&e);
             memset(chk, 0, sizeof sub);
            for(int i = 0; i < e; i++){
                int u, v;
                scanf("%d %d", &u, &v);
                adj[u].push_back(v);
            //adj[v].push_back(u);
            }

并且子树的大小计算为

int * dfs(int current, int parent)
{

        sub[current] = 0;

        for(int i=0;i<adj[current].size();i++)

        {

                int next = adj[current][i];

                if(next == parent)continue;

                dfs(next, current);

                sub[current] += sub[next] + 1;

        }

        return sub;

}

我将adj定义为 形容词[U] .push_back(V); 此算法失败的测试用例 输入文件:

9 7
0 1
1 2
1 3
2 3
3 4
6 7
6 8

我的输出为

*(s + 0) : 6
*(s + 1) : 5
*(s + 2) : 2
*(s + 3) : 1
*(s + 4) : 0
*(s + 5) : 0
*(s + 6) : 0
*(s + 7) : 0
*(s + 8) : 0

工作一:输入

5 4
1 2
1 3
1 4
3 4
output is
*(s + 0) : 0
*(s + 1) : 4
*(s + 2) : 0
*(s + 3) : 1
*(s + 4) : 0

0 个答案:

没有答案