您的位置:首页 > 其它

PAT甲级解题笔记1004-dfs/树的遍历

2018-07-31 13:26 323 查看

PAT甲级解题笔记1004

题意:输入总结点数N(0<N<100),非叶节点数M<N,接下来M行:
非叶节点编号ID(00,01……的形式),其子节点数K,子节点编号ID[0] ID[1] ... ID[K] 

输出:每一层叶节点的个数,以空格隔开,结尾无空格。

实现方法:

1.用递归实现dfs

2.使用一维定长(题中说明0<N<100)一维变长(子节点数不定)的vector数组

vector<int> num[100];

num[index].size()

num[id].push_back(nowid);

[code]#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int> num[100];
int n, m, id, k, nowid;
int leave[100] = { 0 }, maxdepth=-1;
void dfs(int index, int depth)
{
if (num[index].size() == 0)//若没有子节点
{
leave[depth]++;//对应层数的叶节点数增加1
maxdepth = max(maxdepth, depth);//更新最大层数
return;
}
for (int i = 0; i < num[index].size(); i++)
{
dfs(num[index][i], depth+1);//dfs常用递归,判断子节点是否有子节点,层数增加1
}
}
int main(void)
{
cin >> n >> m;
while (m--)
{
cin >> id >> k;
while (k--)
{
cin >> nowid;
num[id].push_back(nowid);
}
}
dfs(1, 0);//根节点为01,层数为0
cout << leave[0];
for(int i=1;i<=maxdepth;i++)
cout << " " << leave[i];
system("PAUSE");
return 0;
}

参考资料:https://www.liuchuo.net/archives/2229

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: