笔试题

来源:互联网 发布:淘宝i7 7700k那么便宜 编辑:程序博客网 时间:2024/06/05 18:48

拼多多校招一个题目,自己的一点见解,只在本机上运行过。
题目如下:
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个文件的位置,方便下一次递归调用时找到这个目录的子目录。