题目描述


分析:
找出一棵树哪一层的结点数最多,DFS或者BFS搜索每层的结点数即可,存到一个数组中,最后选出最大值,树的存储采用二维数组存储。
#include<cstdio>
#include<vector>
using namespace std;
vector<int> node[105];
int hashTable[105]={0};
void DFS(int index,int level){
hashTable[level]++;
for(int i=0;i<node[index].size();i++){
DFS(node[index][i],level+1);
}
}
int main(){
int n,m,k,parent,child;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d",&parent,&k);
while(k--){
scanf("%d",&child);
node[parent].push_back(child);
}
}
DFS(1,1);
int maxn=-1,maxnlevel=0;
for(int i=1;i<105;i++){
if(hashTable[i]>maxn){
maxn=hashTable[i];
maxnlevel=i;
}
}
printf("%d %d\n",maxn,maxnlevel);
return 0;
}
树的层次遍历与最大节点数
该博客主要介绍了如何使用深度优先搜索(DFS)和广度优先搜索(BFS)来查找一棵由二维数组存储的树中节点数最多的层次。通过遍历每个节点并更新层次节点计数哈希表,最终找到层数和节点数的最大值。示例代码展示了从根节点开始的DFS实现,并输出了最大节点数及其所在的层次。
245

被折叠的 条评论
为什么被折叠?



