笔试题

拼多多校招一个题目,自己的一点见解,只在本机上运行过。
题目如下:
tree命令将一个目录结构直观地显示出来,现在给你一个目录结构,请你按tree命令来输出。
输入描述:
第一行包含一个整数,表示需要你输出的树有N个节点。节点的编号从0到N-1的整数。编号为0的节点是树节点。接下来有N行,第i行包含一个字符串s,其父节点编号是p。保证字符串的正确性以及长度。
输出描述:
给出树的tree命令形式输出,要求同一个目录下要按照字母来先后排序。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;


public class niuke {
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        while(s.hasNext()){
            int count = s.nextInt();
            String[] strName = new String[count];
            int[] parNode = new int[count]; 
            for(int i=0;i<count;i++){
                strName[i] = s.next();
                parNode[i] = s.nextInt();
            }
            Dept(strName,parNode,0);
        }
    }

    private static void Dept(String[] strName, int[] parNode, int root) {
        System.out.println(strName[root]);
        Map<String, Integer> map = new HashMap<String, Integer>();
        for(int i=0;i<strName.length;i++){
            if(parNode[i] == root){
                map.put(strName[i], i);
            }
        }
        List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());  
        Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {     
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {        
                return (o1.getKey()).toString().compareTo(o2.getKey());  
            }
        });
        for(Map.Entry<String, Integer> m : infoIds){  
            //System.out.println(m.getKey()+":"+ m.getValue());
            Dept(strName, parNode, m.getValue());
        };
        return;
    }
}

第一个数组String strName[]定义为N个文件的文件名
第二个数组int[] parNode定义为N个文件的父目录的位置
方法Dept(String[] strName, int[] parNode, int root)用来按树打印
注意要重写排序方法,Map中存放的是子文件的名字以及这个子文件对应N个文件的位置,方便下一次递归调用时找到这个目录的子目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值