1004. Counting Leaves (30)


题目要求输出每层非父母的结点个数

思路:

1.建立一个数组来保存题目给出的父母结点,为提升查找效率,使用索引数组,大小为100,只有父母结点的值是“有效”的。


2.再建立一个数组统计每层的非父母结点数。

3.使用基于dfs的前序遍历,遍历到叶子结点统计个数。

需知:

只拿了27分,第三个测试点不过


#include <iostream>

#include <vector>

#include <algorithm>

#include <iostream>



using namespace std;

int levelMax=0;   //最后输出用

class node

{

public:

bool ispa;

int n;

vector<int> v;



node():ispa(false),v(100),n(0){}

};



void func(vector<node> &vno,vector<int> &vtr,int level,int i)  //bfs遍历

{

if(!vno[i].ispa)

{

vtr[--level]++;

levelMax=levelMax>level?levelMax:level;

return;

}

level++;

for(int ii=0;ii<vno[i].n;ii++)   



func(vno,vtr,level,vno[i].v[ii]);  //vno[i].v[ii],当前结点的子节点

return;

}

int main()

{

int n,m;  

cin>>n>>m;



vector<node> vno(100);  //结点数组,vector_node

int i=0;

while(i<m)

{

int ii,jj;

cin>>ii;

cin>>vno[ii].n;

jj=0;

vno[ii].ispa=true;

while(jj<vno[ii].n)

cin>>vno[ii].v[jj++];

i++;





}

vector<int> vtr(100);  //树的层次数组,vector_tree

func(vno,vtr,1,1); 



i=0;

cout<<0;

while(i++<levelMax)

cout<<" "<<vtr[i];

system("pause");

return 0;

}


测试:

8 4

1 3 2 3 4

2 2 5 6

5 1 8

3 1 7


PAT甲级 1004 27/30PAT甲级 1004 27/30





相关文章:

  • 2022-01-02
  • 2021-11-16
  • 2021-04-22
  • 2022-12-23
  • 2022-12-23
  • 2021-09-04
  • 2021-08-25
  • 2021-08-28
猜你喜欢
  • 2021-06-02
  • 2021-09-18
  • 2022-02-27
  • 2021-08-20
  • 2021-10-02
  • 2022-12-23
  • 2021-07-25
相关资源
相似解决方案