• 1004 Counting Leaves


    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, the number of nodes in a tree, and M (<), 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

    import java.util.* ;
    
    public class Main{
        static class Node{
            int id;
            Queue<Node> children;
            Node(int id){
                this.id=id;
            }
        }
        static HashMap<Integer,Node> tree;
        static int N;//树的节点个数
        static int M;//有孩子的节点数
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            N = sc.nextInt();
            M = sc.nextInt();
            tree = new HashMap<>();
            for(int i=0;i<M;i++){
                int id=sc.nextInt();
                int K = sc.nextInt();
                Node node = new Node(id);
                Queue<Node> children = new LinkedList<>();
                for(int j=0;j<K;j++){
                    Node no = new Node(sc.nextInt());
                    children.offer(no);
                }
                node.children=children;
                tree.put(id,node);
            }
            Queue<Node> que =new LinkedList<>();
            que.add(tree.get(1));
            BFS(que);
        }
        
        public static void BFS(Queue<Node> que){
            int len = 0;
            Queue<Node> NextQue = new LinkedList<>();
            while(que.size()!=0){
                Node node = que.poll();
                if(tree.size()==0||!tree.containsKey(node.id)){
                    len++;
                }else{
                    NextQue.addAll(tree.get(node.id).children);
                }
            }
            if(NextQue.size()==0){
                System.out.print(len);
            }
            else {
                System.out.print(len+" ");
                BFS(NextQue);
            }
        }
    }

    思路为BFS。

    HashMap建树。

  • 相关阅读:
    java实现倒计时
    javaweb启动时启动socket服务端
    二进制数与十六进制数之间如何互相转换
    分组查询最新时间的数据
    javaweb利用钉钉机器人向钉钉群推送消息(解决中文乱码)
    java利用钉钉机器人向钉钉群推送消息
    Java原生操作数据库(不使用框架)
    Mybatis 插入与批量插入以及多参数批量删除
    在spring中直接在类中注入dao
    web自动化测试实战之批量执行测试用例
  • 原文地址:https://www.cnblogs.com/godoforange/p/10903084.html
Copyright © 2020-2023  润新知