PAT甲级练习1004. Counting Leaves (30)

1004. Counting Leaves (30)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.

Input

Each input file contains one test case. Each case starts with a line containing 0 < N < 100, the number of nodes in a tree, and M (< N), the number of non-leaf nodes. Then M lines follow, each in the format:

ID K ID[1] ID[2] ... ID[K]
where ID is a two-digit number representing a given non-leaf node, K is the number of its children, followed by a sequence of two-digit ID's of its children. For the sake of simplicity, let us fix the root ID to be 01.

Output

For each test case, you are supposed to count those family members who have no child for every seniority level starting from the root. The numbers must be printed in a line, separated by a space, and there must be no extra space at the end of each line.

The sample case represents a tree with only 2 nodes, where 01 is the root and 02 is its only child. Hence on the root 01 level, there is 0 leaf node; and on the next level, there is 1 leaf node. Then we should output "0 1" in a line.

Sample Input
2 1
01 1 02
Sample Output
0 1
一开始的想法是用一个数组来表示每个节点的层级,再用一个数组来统计各层级的叶子数。具体代码如下所示。

但是只能通过四个节点,仔细想了想当中的问题,发现如果给出的父子节点信息不是从上往下顺次给出的是会有问题。


import java.util.Scanner;

public class Main {
	
	
	public static void main(String[] args) {
		
		int[] level = new int[100];
		int[] leaf_cnt = new int[100]; 
		int father_node = 01;
		int child_num = 0; 
		int child_node = 0;
		
		Scanner s = new Scanner(System.in);
		
		int n = s.nextInt();//the number of nodes in a tree
		int m = s.nextInt();//the number of non-leaf nodes
		
		leaf_cnt[0] = 1;
		
		for(int i=0; i0; i--){
			if(leaf_cnt[i] !=0){
				for(int j=1; j

后来还是换了种方法。开始考虑使用BFS,但是考虑到判断最后的结尾是一个问题。最后还是使用DFS来做,使用动态数组保存节点信息和子节点信息,然后使用一个层次的数组来保存对应层次的叶子数。


import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	
	private static ArrayList> nodes = new ArrayList> ();
	private static int[] leaf_cnt = new int[100];
	
	public static void dfs(int start, int level){
		if(nodes.get(start).isEmpty()){
			leaf_cnt[level]++; 
		}
		for(int i=0; i node = new ArrayList();
			nodes.add(node);
		}
		
		Scanner s = new Scanner(System.in);
		
		int n = s.nextInt();//the number of nodes in a tree
		int m = s.nextInt();//the number of non-leaf nodes
		
		int father_node = 0;
		int child_num = 0; 
		int child_node = 0;
		
		for(int i=0; i0; i--){
			if(leaf_cnt[i] !=0){
				for(int j=1; j


你可能感兴趣的:(PAT甲级练习)