A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.
Input Specification:
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
.
The input ends with N being 0. That case must NOT be processed.
Output Specification:
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
1 import java.util.Scanner; 2 import java.util.ArrayList; 3 import java.util.HashMap; 4 import java.util.Map; 5 public class Main{ 6 7 public static void main(String[] args){ 8 9 Scanner sc = new Scanner(System.in); 10 int n = sc.nextInt(); 11 int m = sc.nextInt(); 12 int i = 0,j,id,k,child; 13 ArrayListlist; 14 HashMap > map = new HashMap<>(); 15 int[] record = new int[n]; 16 17 while(i < m){ 18 id = sc.nextInt(); 19 k = sc.nextInt(); 20 list = new ArrayList<>(); 21 for(j = 0;j < k;j++){ 22 child = sc.nextInt(); 23 list.add(child); 24 } 25 map.put(id, list); 26 i++; 27 } 28 int p = DFS(map, record,1,0,0); 29 for(i = 0; i < p ;i++){ 30 System.out.print(record[i] + " "); 31 } 32 System.out.print(record[i]); 33 } 34 35 private static int DFS(Map > map, int[] record, int node,int level, int height){ 36 ArrayList list = map.get(node); 37 if(list == null){ 38 record[level]++; 39 return height; 40 } 41 for(Integer integer:list){ 42 height = Math.max(height,DFS(map,record,integer,level+1,level+1)); 43 } 44 return height; 45 } 46 }