Нахождение наибольшей и наименьшей длины пути дерева каталогов Java

У меня возникла проблема с проблемой, которая связана с деревом каталогов и нахождением наименьшего и наибольшего пути длины в этом дереве. Проблема заключается в следующем:

Учитывая строку каталогов и имен файлов, где число "-" указывает на отношение между всеми каталогами (например, какие файлы и каталоги находятся в каталоге), найдите наименьшую и наибольшую длину пути.

Например, строка, которая имеет следующее содержимое:

dir1
-file1
-file2
-innerDir1
--file11
--file12
--file13
--innerinnerDir1
---file111
-innerDir2
--file21

показывает, что file1, file2, innderDir1 и innderDir2 находятся в каталоге dir1. file11, file12, file13 и innerinnerDir1 находятся в каталоге innderDir1.

Путь к файлу "dir1/" - это, очевидно, самый короткий путь, где "dir1/innerDir1/innerinnerDir1/file111" - это, очевидно, самый длинный путь (измеряется по длине строки).

Из моей работы я понимаю, что это проблема дерева, в частности проблема дерева каталогов. Итак, я пробовал 2 рекурсивных метода: один, который находит максимум, другой, который находит мин.

Однако я не могу понять, как это сделать. Наличие "-" определяет, какие каталоги / файлы в каких каталогах сбивает меня с толку. У меня также реализована базовая древовидная структура (см. Код ниже). Как я могу построить дерево с учетом строки? Должен ли я не беспокоиться о построении дерева и его обходе, а вместо этого просто попытаться найти минимальное и максимальное значения без использования древовидной структуры?

Код дерева:

public class Tree<T> {
    private Node<T> root;

    public Tree(T rootData) {
        root = new Node<T>();
        root.data = rootData;
        root.children = new ArrayList<Node<T>>();
    }

    public static class Node<T> {
        private T data;
        private Node<T> parent;
        private List<Node<T>> children;
    }
}

1 ответ

public void doit(){
    String data = "dir1-file1-file2-innerDir1--file11  
    --file12--file13--innerinnerDir1---file111-innerDir2--file21";

    System.out.println("Smallest -> " + findSmallest(data));
    System.out.println("Largest -> " + findLargest(data));

}

public String findSmallest(String data){

    return new StringTokenizer(data,"-").nextToken();

}

public String getDelimiter(int value){

    StringBuilder sb = new StringBuilder();

    for (int i = 0 ; i < value; i++){

        sb.append("-");
    }


    return sb.toString();

}


public String findLargest(String data){

    int depth = 0;      

    while (data.indexOf(getDelimiter(++depth)) != -1);

    depth-=1;       
    String value = data.substring(data.indexOf(getDelimiter(depth)) + depth);       
    return value.substring(0, value.indexOf(getDelimiter(1)));


}
Другие вопросы по тегам