【问题标题】:Finding largest and smallest path length of tree directory Java查找树目录Java的最大和最小路径长度
【发布时间】:2016-02-16 08:57:25
【问题描述】:

我在处理目录树并在该树中查找长度最小和最大路径的问题时遇到了麻烦。问题是这样的:

给定一串目录和文件名,其中“-”的数字表示所有目录之间的关系(例如一个目录中有哪些文件和目录),求最小和最大路径长度。

例如,具有以下内容的字符串:

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”显然是最长路径(以字符串长度衡量)。

从我的工作中,我了解到这是一个树问题,特别是目录树问题。所以,我尝试了两种递归方法:一种找到最大值,一种找到最小值。

但是,我不太清楚怎么做。让“-”确定哪些目录/文件在哪些目录中让我感到困惑。我还实现了一个基本的树结构(见下面的代码)。如何在给定字符串的情况下构建树?我是否应该不用担心构建树然后遍历它,而只是尝试在不使用树结构的情况下找到最小值和最大值?

树代码:

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;
    }
}

【问题讨论】:

  • “dir1”本身是一条完整的路径吗?如果答案总是只是你的树的根,那么问最短路径似乎很奇怪......
  • 抱歉,感谢您的澄清。我们正在尝试找到不包括根的最小路径。

标签: java algorithm recursion tree directory-tree


【解决方案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)));


}

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多