Нахождение наибольшей и наименьшей длины пути дерева каталогов 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)));
}