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 ;
    }
}
原文地址:https://www.cnblogs.com/jasonlixuetao/p/10718299.html