2019_京东JAVA实习生招聘机试第一题
题意抽象出来就是,求根节点的所有子节点中,以这些子节点为根的子树的最大节点数。
已有向图的方式来保存无向图,所以叶子结点i的eage[i].size()==1。
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static boolean flag[] = new boolean[100002]; //置零 public static int gettime(int root, List<List<Integer>> eage){ if(eage.get(root).size() == 1) return 1; int time=0; for(int i=0; i<eage.get(root).size(); i++){ int son = eage.get(root).get(i); if(flag[son]==false){ flag[son] = true; time += gettime(son, eage); } } return time+1; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); List<List<Integer>> list = new ArrayList<>(); for(int i=0;i<=n;i++){ list.add(new ArrayList<>()); } for(int i=0; i<n-1; i++) { int a = in.nextInt(); int b = in.nextInt(); list.get(a).add(b); list.get(b).add(a); } if(n==1){ System.out.println(0); return; } int res=0; flag[1]=true; for(int i=0; i<list.get(1).size(); i++){ flag[list.get(1).get(i)]=true; int temp = gettime(list.get(1).get(i), list); //System.out.println(temp); res = Math.max(temp, res); } System.out.println(res); return ; } }