查找树目录Java的最大和最小路径长度
我遇到了一个问题,这个问题涉及目录树,并在该树中找到长度最小和最大的路径。问题是: 给定一个目录和文件名字符串,其中“-”表示所有目录之间的关系(例如目录中的哪些文件和目录),查找最小和最大路径长度 例如,具有以下内容的字符串:查找树目录Java的最大和最小路径长度,java,algorithm,recursion,tree,directory-tree,Java,Algorithm,Recursion,Tree,Directory Tree,我遇到了一个问题,这个问题涉及目录树,并在该树中找到长度最小和最大的路径。问题是: 给定一个目录和文件名字符串,其中“-”表示所有目录之间的关系(例如目录中的哪些文件和目录),查找最小和最大路径长度 例如,具有以下内容的字符串: dir1 -file1 -file2 -innerDir1 --file11 --file12 --file13 --innerinnerDir1 ---file111 -innerDir2 --file21 显示file1、file2、innderDir1和innd
dir1
-file1
-file2
-innerDir1
--file11
--file12
--file13
--innerinnerDir1
---file111
-innerDir2
--file21
显示file1、file2、innderDir1和innderDir2都在目录dir1中。file11、file12、file13和innerdir1都在innderDir1目录中
文件路径“dir1/”显然是最短路径,其中“dir1/innerDir1/innerDir1/file111”显然是最长路径(通过字符串长度度量)
从我的工作中,我了解到这是一个树问题,特别是一个目录树问题。所以,我尝试了两种递归方法:一种是查找最大值,另一种是查找最小值
然而,我不太明白怎么做。让“-”确定哪些目录中的目录/文件会让我感到困惑。我还实现了一个基本的树结构(参见下面的代码)。如何在给定字符串的情况下构建树?我是否应该不用担心构建树,然后遍历它,而只是尝试在不使用树结构的情况下找到最小值和最大值
树代码:
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;
}
}
公共类树{
私有节点根;
公共树(T根数据){
根=新节点();
root.data=rootData;
root.children=new ArrayList();
}
公共静态类节点{
私有T数据;
私有节点父节点;
私人名单儿童;
}
}
公共void doit(){
String data=“dir1-file1-file2-innerDir1--file11
--file12--file13--innerdir1--file111-innerDir2--file21”;
System.out.println(“最小->”+findsmalest(数据));
System.out.println(“最大->”+findLargest(数据));
}
公共字符串FindSalList(字符串数据){
返回新的StringTokenizer(数据“-”).nextToken();
}
公共字符串getDelimiter(int值){
StringBuilder sb=新的StringBuilder();
for(int i=0;i
dir1本身就是一条完整的路径吗?如果答案总是树的根,那么问最短路径似乎很奇怪……对不起,谢谢你的澄清。我们试图找到不包括根的最小路径。
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)));
}